Moral Anger and Disgust: Recipient vs. Initiator Focus in Moral Transgressions

Eva Vives, Astrid Thébault Guiochon, Bastien Trémolière, Agnès Falco, Hakim Djeriouat
Study of Cognitive Mechanisms (EMC) Laboratory

Modified

June 17, 2024

1 Loading

1.1 Librairies

Downloading packages
if (!require("aod")) 
  install.packages("aod")
if (!require("broom.mixed")) 
  install.packages("broom.mixed")
if (!require("car")) 
  install.packages("car")
if (!require("data.table")) 
  install.packages("data.table")
if (!require("dplyr")) 
  install.packages("dplyr")
if (!require("effects")) 
  install.packages("effects")
if (!require("emmeans")) 
  install.packages("emmeans")
if (!require("fitdistrplus")) 
  install.packages("fitdistrplus")
if (!require("ggeffects")) 
  install.packages("ggeffects")
if (!require("ggplot2")) 
  install.packages("ggplot2")
if (!require("ggpubr")) 
  install.packages("ggpubr")
if (!require("ggthemes")) 
  install.packages("ggthemes")
if (!require("gridExtra")) 
  install.packages("gridExtra")
if (!require("knitr")) 
  install.packages("knitr")
if (!require("labelled")) 
  install.packages("labelled")
if (!require("lme4")) 
  install.packages("lme4")
if (!require("lmerTest")) 
  install.packages("lmerTest")
if (!require("lmtest")) 
  install.packages("lmtest")
if (!require("magrittr")) 
  install.packages("magrittr")
if (!require("MuMIn")) 
  install.packages("MuMIn")
if (!require("nortest")) 
  install.packages("nortest")
if (!require("performance")) 
  install.packages("performance")
if (!require("plyr")) 
  install.packages("plyr")
if (!require("plotly")) 
  install.packages("plotly")
if (!require("readr")) 
  install.packages("readr")
if (!require("readxl")) 
  install.packages("readxl")
if (!require("sjPlot")) 
  install.packages("sjPlot")
if (!require("tidyr")) 
  install.packages("tidyr")
if (!require("tidyverse")) 
  install.packages("tidyverse")
if (!require("tinytex")) 
  tinytex::install_tinytex()
remotes::install_github("mattansb/ggggeffects")
library(aod)
library(broom.mixed)
library(car)
library(data.table)
library(dplyr)
library(effects)
library(emmeans)
library(fitdistrplus)
library(ggeffects)
library(ggplot2)
library(ggpubr)
library(ggthemes)
library(gridExtra)
library(gtsummary)
library(labelled)
library(lme4)
library(lmerTest)
library(lmtest)
library(magrittr)
library(MuMIn)
library(nortest)
library(performance)
library(plyr)
library(plotly)
library(readr)
library(readxl)
library(sjPlot)
library(tidyr)
source('./themes/ggplot_theme_Publication-2.R')

1.2 References

References
knitr::write_bib(c(.packages()), 
                 file = "references/packages.bib")

1.3 Working directory

⚠️ Adapt to your computer

1.4 Processing

1.4.1 Dataset

💡 Opens an explorer window (or use file path)

# Dataset study 1
data = read.csv("./dataset/Dataset_s1.csv", sep = ";", header = T, dec = ".", na.strings = "NA")
#f = file.choose()
#data = read.csv(f, sep = ";", header = T, dec = ".", na.strings = "NA")

# Dataset study 2
data2 = read.csv("./dataset/Dataset_s2.csv", sep = ";", header = T, dec = ".", na.strings = "NA")
#f = file.choose()
#data2 = read.csv(f, sep = ";", header = T, dec = ".", na.strings = "NA")
#rm(f)

1.4.2 Preparation

var_label(data) = list(condition = "Condition (Appraisal)",
                       newemo = "Emotion",
                       newclass = "Class of Transgression",
                       age = "Age",
                       newgender = "Sex",
                       political_orientation = "Political Orientation (1-Liberal to 7-Conservative")

data = 
  data |>
    mutate(newemo = factor(newemo, levels = c("colere", "degout", "peur", "tristesse", "neutre", "joie")),
           across(c(condition, newgender, newclass, political_orientation), as.factor),
           condition = recode_factor(condition, 
                              Agresseur = "Perpetrator", 
                              Victime = "Victim"),
           newgender = recode_factor(newgender, 
                              "0" = "Female", 
                              "1" = "Male"),
           newemo = recode_factor(newemo, 
                           colere = "Anger", 
                           degout = "Disgust", 
                           peur = "Fear", 
                           tristesse = "Sadness",
                           neutre = "Neutral",
                           joie = "Joy"),
           newclass = recode_factor(newclass, 
                             abandonment = "Abandonment", 
                             betrayal = "Betrayal", 
                             harm = "Harm",
                             humiliation = "Humiliation", 
                             injustice = "Injustice")) |>
    rename(item = newslide)

var_label(data2) = list(condition = "Condition (Appraisal)",
                        newemo = "Emotion",
                        newclass = "Class of Transgression",
                        scenarios = "Scenario",
                        age = "Age",
                        newgender = "Sex",
                        political_orientation = "Political Orientation (1-Liberal to 7-Conservative")

data2 = 
  data2 |>
    mutate(newemo = factor(newemo, levels = c("colere", "degout", "neutre", "tristesse")),
           across(c(condition, newgender, newclass, political_orientation), as.factor),
           condition = recode_factor(condition, 
                              Agresseur = "Perpetrator", 
                              Victime = "Victim"),
           newgender = recode_factor(newgender, 
                              "0" = "Female", 
                              "1" = "Male"),
           newemo = recode_factor(newemo, 
                           colere = "Anger", 
                           degout = "Disgust", 
                           tristesse = "Sadness",
                           neutre = "Neutral"),
           newclass = recode_factor(newclass, 
                             harm = "Harm",
                             humiliation = "Humiliation", 
                             injustice = "Injustice",
                             norm = "Control"),
           scenarios = recode_factor(scenarios,
                              moral = "Transgression",
                              norm = "Control"))
    #rename(item = newslide)

1.5 Descriptive statistics

1.5.1 Demographics

Study 1

summary_data = data[,] %>%
  select(prolific_ID, age, political_orientation, genre) %>%
  group_by(prolific_ID) %>%
  summarise(
    age = first(age),
    political_orientation = first(political_orientation),
    genre = first(genre),
    .groups = 'drop')

summary(summary_data)
 prolific_ID             age        political_orientation    genre          
 Length:173         Min.   :18.00   1:20                  Length:173        
 Class :character   1st Qu.:25.00   2:49                  Class :character  
 Mode  :character   Median :33.00   3:22                  Mode  :character  
                    Mean   :37.24   4:37                                    
                    3rd Qu.:48.00   5:20                                    
                    Max.   :73.00   6:16                                    
                    NA's   :2       7: 9                                    
count(summary_data$genre)
        x freq
1   A man   93
2 A woman   80

Study 2

summary_data2 = data2[,] %>%
  select(prolific_ID, age, political_orientation, genre) %>%
  group_by(prolific_ID) %>%
  summarise(
    age = first(age),
    political_orientation = first(political_orientation),
    genre = first(genre),
    .groups = 'drop')

summary_data2
# A tibble: 139 × 4
   prolific_ID                age political_orientation genre  
   <chr>                    <int> <fct>                 <chr>  
 1 55895b93fdf99b6bd06017c4    56 7                     A man  
 2 5671927473f58b000d664293    32 1                     A woman
 3 56721761980a3c0011277389    51 5                     A woman
 4 575865ba7b74a80006de2689    31 1                     A man  
 5 57bf14513c449a000189c89a    70 1                     A man  
 6 588fc465a7e5300001199329    39 7                     A man  
 7 58adfc6e7cf56d0001f931a2    26 2                     A man  
 8 58e558cc728bea0001bbda24    66 5                     A woman
 9 5a61207cc0d8360001078f07    49 7                     A woman
10 5ab6cbbbf69e940001d8e446    58 1                     A woman
# ℹ 129 more rows
count(summary_data2$genre)
        x freq
1   A man   66
2 A woman   73

1.6 Distribution of reaction time

Study 1

fit_norm = fitdist(as.numeric(na.exclude(data$rt_net)), distr = "norm")
#shapiro.test(data$rt_net)
ad.test(data$rt_net)# Anderson Darling as the Shapiro Test has a sample size max

    Anderson-Darling normality test

data:  data$rt_net
A = 650.88, p-value < 2.2e-16
fit_log = fitdist(as.numeric(log((na.exclude(data$rt_net)))), distr = "norm")

plot(fit_norm)

plot(fit_log)

Study 2

fit_norm2 = fitdist(as.numeric(na.exclude(data2$rt_net)), distr = "norm")
#shapiro.test(data2$rt_net)
ad.test(data2$rt_net) # Anderson Darling as the Shapiro Test has a sample size max

    Anderson-Darling normality test

data:  data2$rt_net
A = 192.83, p-value < 2.2e-16
fit_log2 = fitdist(as.numeric(log((na.exclude(data2$rt_net)))), distr = "norm")

plot(fit_norm2)

plot(fit_log2)

2 Analysis

2.1 Study 1

2.1.1 Reaction Time

Full mixed-effect model

full = lmer(log(rt_net) ~ condition * newemo + (1|number_ID) + (1|item),
           na.action = na.omit,
           data = data)

Summary

tbl_regression(full,
               label = list(condition ~ "Condition",
                            newemo ~ "Emotion")) %>%
  modify_column_unhide(column = std.error) %>%
  modify_column_unhide(column = statistic) %>%
  modify_header(label = "**Variable**") %>%
  bold_p() %>%
  modify_fmt_fun(statistic ~ style_sigfig) %>%
  add_significance_stars(hide_ci = FALSE,
                         hide_p = FALSE,
                         pattern = "{p.value}{stars}") %>%
  add_glance_source_note(label = list(sigma ~ "\U03C3"),
                         include = c(AIC, sigma))
Variable Beta SE1 Statistic 95% CI1 p-value2
Condition




    Perpetrator
    Victim -0.02 0.046 -0.34 -0.11, 0.07 0.7
Emotion




    Anger
    Disgust 0.02 0.012 1.9 0.00, 0.05 0.064
    Fear 0.07 0.012 6.0 0.05, 0.10 <0.001***
    Sadness 0.05 0.012 4.3 0.03, 0.07 <0.001***
    Neutral 0.10 0.012 8.3 0.08, 0.12 <0.001***
    Joy -0.01 0.012 -0.53 -0.03, 0.02 0.6
Condition * Emotion




    Victim * Disgust 0.03 0.017 1.7 -0.01, 0.06 0.10
    Victim * Fear 0.00 0.017 0.18 -0.03, 0.04 0.9
    Victim * Sadness -0.04 0.017 -2.4 -0.07, -0.01 0.016*
    Victim * Neutral -0.01 0.017 -0.74 -0.05, 0.02 0.5
    Victim * Joy -0.04 0.017 -2.2 -0.07, 0.00 0.027*
AIC = 12,899; σ = 0.333
1 SE = Standard Error, CI = Confidence Interval
2 *p<0.05; **p<0.01; ***p<0.001

Anova & conditional and marginal coefficient of determination

Anova(full, type = 3, ddf = "Satterthwaite")
Analysis of Deviance Table (Type III Wald chisquare tests)

Response: log(rt_net)
                      Chisq Df Pr(>Chisq)    
(Intercept)      43707.5731  1  < 2.2e-16 ***
condition            0.1146  1  0.7349855    
newemo             120.9978  5  < 2.2e-16 ***
condition:newemo    23.8197  5  0.0002351 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(r.squaredGLMM(full, method = "marginal"), 4)
        R2m    R2c
[1,] 0.0098 0.4393
  • Main effect of Emotion \[\chi^2(5) = 120.998, p < .001\]
  • Interaction between Condition and Emotion \[\chi^2(5) = 23.82, p < .001\]

Variance explained by the model: \[R^2_m = 0.98\% \text{ (fixed)}\] \[R^2_c = 43.93\% \text{ (fixed + random)}\]

Pairwise comparisons & estimated marginal means

emmeans(full, pairwise ~ newemo, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 newemo  response   SE  df asymp.LCL asymp.UCL
 Anger        937 21.6 Inf       896       980
 Disgust      971 22.4 Inf       929      1016
 Fear        1009 23.2 Inf       964      1055
 Sadness      966 22.2 Inf       924      1011
 Neutral     1029 23.7 Inf       984      1077
 Joy          914 21.0 Inf       874       956

Results are averaged over the levels of: condition 
Degrees-of-freedom method: asymptotic 
Confidence level used: 0.95 
Intervals are back-transformed from the log scale 

$contrasts
 contrast          ratio      SE  df null z.ratio p.value
 Anger / Disgust   0.965 0.00809 Inf    1  -4.303  0.0003
 Anger / Fear      0.929 0.00781 Inf    1  -8.786  <.0001
 Anger / Sadness   0.970 0.00810 Inf    1  -3.694  0.0033
 Anger / Neutral   0.910 0.00770 Inf    1 -11.100  <.0001
 Anger / Joy       1.025 0.00855 Inf    1   2.964  0.0455
 Disgust / Fear    0.963 0.00812 Inf    1  -4.480  0.0001
 Disgust / Sadness 1.005 0.00842 Inf    1   0.626  1.0000
 Disgust / Neutral 0.944 0.00801 Inf    1  -6.809  <.0001
 Disgust / Joy     1.063 0.00889 Inf    1   7.266  <.0001
 Fear / Sadness    1.044 0.00877 Inf    1   5.123  <.0001
 Fear / Neutral    0.980 0.00833 Inf    1  -2.348  0.2830
 Fear / Joy        1.104 0.00926 Inf    1  11.750  <.0001
 Sadness / Neutral 0.939 0.00793 Inf    1  -7.459  <.0001
 Sadness / Joy     1.057 0.00881 Inf    1   6.668  <.0001
 Neutral / Joy     1.126 0.00950 Inf    1  14.053  <.0001

Results are averaged over the levels of: condition 
Degrees-of-freedom method: asymptotic 
P value adjustment: bonferroni method for 15 tests 
Tests are performed on the log scale 
emmeans(full, pairwise ~ condition, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 condition   response   SE  df asymp.LCL asymp.UCL
 Perpetrator      983 31.3 Inf       923      1046
 Victim           958 30.0 Inf       901      1019

Results are averaged over the levels of: newemo 
Degrees-of-freedom method: asymptotic 
Confidence level used: 0.95 
Intervals are back-transformed from the log scale 

$contrasts
 contrast             ratio     SE  df null z.ratio p.value
 Perpetrator / Victim  1.03 0.0457 Inf    1   0.568  0.5700

Results are averaged over the levels of: newemo 
Degrees-of-freedom method: asymptotic 
Tests are performed on the log scale 
emmeans(full, pairwise ~ newemo|condition, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
condition = Perpetrator:
 newemo  response   SE  df asymp.LCL asymp.UCL
 Anger        944 30.9 Inf       886      1007
 Disgust      966 31.6 Inf       905      1030
 Fear        1015 33.3 Inf       952      1083
 Sadness      994 32.6 Inf       932      1060
 Neutral     1044 34.3 Inf       979      1113
 Joy          938 30.7 Inf       880      1001

condition = Victim:
 newemo  response   SE  df asymp.LCL asymp.UCL
 Anger        930 29.9 Inf       873       990
 Disgust      977 31.5 Inf       918      1041
 Fear        1003 32.3 Inf       941      1068
 Sadness      940 30.2 Inf       882      1001
 Neutral     1015 32.7 Inf       953      1081
 Joy          891 28.7 Inf       836       949

Degrees-of-freedom method: asymptotic 
Confidence level used: 0.95 
Intervals are back-transformed from the log scale 

$contrasts
condition = Perpetrator:
 contrast          ratio     SE  df null z.ratio p.value
 Anger / Disgust   0.978 0.0117 Inf    1  -1.852  0.9606
 Anger / Fear      0.930 0.0111 Inf    1  -6.050  <.0001
 Anger / Sadness   0.950 0.0114 Inf    1  -4.258  0.0003
 Anger / Neutral   0.905 0.0110 Inf    1  -8.255  <.0001
 Anger / Joy       1.006 0.0120 Inf    1   0.528  1.0000
 Disgust / Fear    0.951 0.0114 Inf    1  -4.187  0.0004
 Disgust / Sadness 0.972 0.0117 Inf    1  -2.401  0.2454
 Disgust / Neutral 0.925 0.0112 Inf    1  -6.412  <.0001
 Disgust / Joy     1.029 0.0123 Inf    1   2.382  0.2585
 Fear / Sadness    1.022 0.0122 Inf    1   1.785  1.0000
 Fear / Neutral    0.973 0.0118 Inf    1  -2.286  0.3336
 Fear / Joy        1.082 0.0129 Inf    1   6.588  <.0001
 Sadness / Neutral 0.952 0.0116 Inf    1  -4.045  0.0008
 Sadness / Joy     1.059 0.0127 Inf    1   4.793  <.0001
 Neutral / Joy     1.112 0.0135 Inf    1   8.791  <.0001

condition = Victim:
 contrast          ratio     SE  df null z.ratio p.value
 Anger / Disgust   0.951 0.0112 Inf    1  -4.259  0.0003
 Anger / Fear      0.927 0.0110 Inf    1  -6.378  <.0001
 Anger / Sadness   0.989 0.0115 Inf    1  -0.919  1.0000
 Anger / Neutral   0.916 0.0108 Inf    1  -7.434  <.0001
 Anger / Joy       1.044 0.0122 Inf    1   3.704  0.0032
 Disgust / Fear    0.975 0.0116 Inf    1  -2.140  0.4856
 Disgust / Sadness 1.040 0.0122 Inf    1   3.358  0.0118
 Disgust / Neutral 0.963 0.0114 Inf    1  -3.177  0.0223
 Disgust / Joy     1.098 0.0128 Inf    1   7.953  <.0001
 Fear / Sadness    1.067 0.0126 Inf    1   5.489  <.0001
 Fear / Neutral    0.988 0.0118 Inf    1  -1.025  1.0000
 Fear / Joy        1.126 0.0133 Inf    1  10.050  <.0001
 Sadness / Neutral 0.926 0.0109 Inf    1  -6.544  <.0001
 Sadness / Joy     1.055 0.0123 Inf    1   4.635  0.0001
 Neutral / Joy     1.140 0.0134 Inf    1  11.119  <.0001

Degrees-of-freedom method: asymptotic 
P value adjustment: bonferroni method for 15 tests 
Tests are performed on the log scale 

Plot all interaction effects

plotfull = ggpredict(full, terms = c("newemo", "condition"), ci_level = 0.95) %>%
  plot() +
  labs(x = "Emotion", y = "Reaction Time (ms)", colour = "Condition", title = "", element_text(size = 14)) +
  scale_fill_Publication() +
  scale_colour_Publication() +
  theme_Publication()  +
  scale_y_continuous(breaks = c(800, 850, 900, 950, 1000, 1050, 1100, 1150))

plotfull

2.1.2 Appropriateness

Full generalized mixed-effect model

emo = glmer(score ~ newemo * condition + (1|number_ID) + (1|item),
          data = data,
          family = binomial,
          na.action = na.omit,
          control = glmerControl(optimizer = "bobyqa"))

Summary

tbl_regression(emo,
               label = list(condition ~ "Condition",
                            newemo ~ "Emotion")) %>%
  modify_column_unhide(column = std.error) %>%
  modify_column_unhide(column = statistic) %>%
  modify_header(label = "**Variable**") %>%
  bold_p() %>%
  modify_fmt_fun(statistic ~ style_sigfig) %>%
  add_significance_stars(hide_ci = FALSE,
                         hide_p = FALSE,
                         pattern = "{p.value}{stars}") %>%
  add_glance_source_note(label = list(sigma ~ "\U03C3"),
                         include = c(AIC, sigma))
Variable log(OR)1 SE1 Statistic 95% CI1 p-value2
Emotion




    Anger
    Disgust -0.22 0.109 -2.0 -0.44, -0.01 0.042*
    Fear -1.0 0.104 -10 -1.2, -0.83 <0.001***
    Sadness -0.94 0.104 -9.0 -1.1, -0.73 <0.001***
    Neutral -1.1 0.104 -11 -1.3, -0.93 <0.001***
    Joy 0.01 0.111 0.06 -0.21, 0.22 >0.9
Condition




    Perpetrator
    Victim 0.35 0.304 1.2 -0.24, 0.95 0.2
Emotion * Condition




    Disgust * Victim -0.61 0.163 -3.7 -0.93, -0.29 <0.001***
    Fear * Victim -0.57 0.156 -3.7 -0.88, -0.27 <0.001***
    Sadness * Victim 0.90 0.170 5.3 0.57, 1.2 <0.001***
    Neutral * Victim -0.35 0.156 -2.3 -0.66, -0.05 0.024*
    Joy * Victim 0.47 0.185 2.5 0.11, 0.83 0.011*
AIC = 14,107; σ = 1.00
1 OR = Odds Ratio, SE = Standard Error, CI = Confidence Interval
2 *p<0.05; **p<0.01; ***p<0.001

Anova & conditional and marginal coefficient of determination

Anova(emo, type = 3, ddf = "Satterthwaite")
Analysis of Deviance Table (Type III Wald chisquare tests)

Response: score
                    Chisq Df Pr(>Chisq)    
(Intercept)      154.8655  1     <2e-16 ***
newemo           264.8035  5     <2e-16 ***
condition          1.3618  1     0.2432    
newemo:condition 145.6696  5     <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(r.squaredGLMM(emo, method = "marginal"), 4)
               R2m    R2c
theoretical 0.0654 0.5307
delta       0.0440 0.3575
  • Main effect of Emotion \[\chi^2(5) = 264.81, p < .001\]
  • Interaction between Condition and Emotion \[\chi^2(5) = 145.645, p < .001\]

Variance explained by the model: \[R^2_m = 4.40\% \text{ (fixed)}\] \[R^2_c = 35.74\% \text{ (fixed + random)}\]

Pairwise comparisons (estimated marginal means and pairwise comparisons)

emmeans(emo, pairwise ~ newemo, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 newemo   prob      SE  df asymp.LCL asymp.UCL
 Anger   0.950 0.00781 Inf     0.932     0.963
 Disgust 0.918 0.01209 Inf     0.891     0.939
 Fear    0.835 0.02173 Inf     0.788     0.873
 Sadness 0.921 0.01181 Inf     0.894     0.941
 Neutral 0.836 0.02164 Inf     0.789     0.874
 Joy     0.960 0.00638 Inf     0.946     0.971

Results are averaged over the levels of: condition 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        1.695 0.1386 Inf    1   6.450  <.0001
 Anger / Fear           3.746 0.2919 Inf    1  16.944  <.0001
 Anger / Sadness        1.629 0.1383 Inf    1   5.745  <.0001
 Anger / Neutral        3.720 0.2903 Inf    1  16.833  <.0001
 Anger / Joy            0.786 0.0728 Inf    1  -2.597  0.1413
 Disgust / Fear         2.210 0.1562 Inf    1  11.224  <.0001
 Disgust / Sadness      0.961 0.0757 Inf    1  -0.505  1.0000
 Disgust / Neutral      2.195 0.1554 Inf    1  11.105  <.0001
 Disgust / Joy          0.464 0.0405 Inf    1  -8.800  <.0001
 Fear / Sadness         0.435 0.0323 Inf    1 -11.197  <.0001
 Fear / Neutral         0.993 0.0649 Inf    1  -0.105  1.0000
 Fear / Joy             0.210 0.0176 Inf    1 -18.636  <.0001
 Sadness / Neutral      2.284 0.1701 Inf    1  11.094  <.0001
 Sadness / Joy          0.483 0.0435 Inf    1  -8.087  <.0001
 Neutral / Joy          0.211 0.0177 Inf    1 -18.533  <.0001

Results are averaged over the levels of: condition 
P value adjustment: bonferroni method for 15 tests 
Tests are performed on the log odds ratio scale 
emmeans(emo, pairwise ~ condition, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 condition    prob     SE  df asymp.LCL asymp.UCL
 Perpetrator 0.901 0.0186 Inf     0.858     0.932
 Victim      0.927 0.0140 Inf     0.894     0.950

Results are averaged over the levels of: newemo 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
 contrast             odds.ratio    SE  df null z.ratio p.value
 Perpetrator / Victim      0.721 0.202 Inf    1  -1.165  0.2441

Results are averaged over the levels of: newemo 
Tests are performed on the log odds ratio scale 
emmeans(emo, pairwise ~ newemo|condition, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
condition = Perpetrator:
 newemo   prob      SE  df asymp.LCL asymp.UCL
 Anger   0.941 0.01238 Inf     0.911     0.961
 Disgust 0.927 0.01492 Inf     0.892     0.951
 Fear    0.850 0.02775 Inf     0.787     0.896
 Sadness 0.861 0.02595 Inf     0.802     0.905
 Neutral 0.836 0.02974 Inf     0.769     0.886
 Joy     0.941 0.01232 Inf     0.912     0.961

condition = Victim:
 newemo   prob      SE  df asymp.LCL asymp.UCL
 Anger   0.958 0.00912 Inf     0.936     0.972
 Disgust 0.908 0.01812 Inf     0.866     0.938
 Fear    0.819 0.03139 Inf     0.750     0.873
 Sadness 0.956 0.00941 Inf     0.934     0.971
 Neutral 0.836 0.02914 Inf     0.771     0.886
 Joy     0.973 0.00607 Inf     0.958     0.983

Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
condition = Perpetrator:
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        1.249 0.1361 Inf    1   2.038  0.6234
 Anger / Fear           2.813 0.2924 Inf    1   9.947  <.0001
 Anger / Sadness        2.554 0.2664 Inf    1   8.990  <.0001
 Anger / Neutral        3.119 0.3233 Inf    1  10.973  <.0001
 Anger / Joy            0.994 0.1108 Inf    1  -0.056  1.0000
 Disgust / Fear         2.252 0.2278 Inf    1   8.028  <.0001
 Disgust / Sadness      2.045 0.2076 Inf    1   7.049  <.0001
 Disgust / Neutral      2.497 0.2517 Inf    1   9.081  <.0001
 Disgust / Joy          0.796 0.0868 Inf    1  -2.094  0.5443
 Fear / Sadness         0.908 0.0863 Inf    1  -1.015  1.0000
 Fear / Neutral         1.109 0.1042 Inf    1   1.100  1.0000
 Fear / Joy             0.353 0.0368 Inf    1  -9.998  <.0001
 Sadness / Neutral      1.221 0.1154 Inf    1   2.113  0.5191
 Sadness / Joy          0.389 0.0406 Inf    1  -9.042  <.0001
 Neutral / Joy          0.319 0.0331 Inf    1 -11.023  <.0001

condition = Victim:
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        2.300 0.2803 Inf    1   6.832  <.0001
 Anger / Fear           4.988 0.5787 Inf    1  13.852  <.0001
 Anger / Sadness        1.038 0.1391 Inf    1   0.281  1.0000
 Anger / Neutral        4.437 0.5173 Inf    1  12.781  <.0001
 Anger / Joy            0.622 0.0920 Inf    1  -3.210  0.0199
 Disgust / Fear         2.169 0.2140 Inf    1   7.848  <.0001
 Disgust / Sadness      0.452 0.0544 Inf    1  -6.601  <.0001
 Disgust / Neutral      1.930 0.1919 Inf    1   6.611  <.0001
 Disgust / Joy          0.271 0.0368 Inf    1  -9.600  <.0001
 Fear / Sadness         0.208 0.0238 Inf    1 -13.709  <.0001
 Fear / Neutral         0.890 0.0808 Inf    1  -1.288  1.0000
 Fear / Joy             0.125 0.0164 Inf    1 -15.868  <.0001
 Sadness / Neutral      4.273 0.4917 Inf    1  12.624  <.0001
 Sadness / Joy          0.599 0.0879 Inf    1  -3.491  0.0072
 Neutral / Joy          0.140 0.0185 Inf    1 -14.921  <.0001

P value adjustment: bonferroni method for 15 tests 
Tests are performed on the log odds ratio scale 

Plot all interaction effects

plotemo = ggpredict(emo, terms = c("newemo", "condition"), ci_level = 0.95) %>%
  plot() +
  labs(x = "Emotion", y = "Appropriate/Inappropriate Rating Likelihood", colour = "Condition", title = "", element_text(size = 14)) +
  scale_fill_Publication() +
  scale_colour_Publication() +
  theme_Publication() +
  scale_y_continuous(breaks = c(0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1))

plotemo

2.1.3 Exploratory Analyses

Full mixed-effect model with condition

class = lmer(log(rt_net) ~ condition * newclass * newemo + (1|number_ID) + (1|item),
             na.action = na.omit,
             data = data)

Summary

tbl_regression(class,
               label = list(condition ~ "Condition",
                            newemo ~ "Emotion",
                            newclass ~ "Class of Trangression")) %>%
  modify_column_unhide(column = std.error) %>%
  modify_column_unhide(column = statistic) %>%
  modify_header(label = "**Variable**") %>%
  bold_p() %>%
  modify_fmt_fun(statistic ~ style_sigfig) %>%
  add_significance_stars(hide_ci = FALSE,
                         hide_p = FALSE,
                         pattern = "{p.value}{stars}") %>%
  add_glance_source_note(label = list(sigma ~ "\U03C3"),
                         include = c(AIC, sigma))
Variable Beta SE1 Statistic 95% CI1 p-value2
Condition




    Perpetrator
    Victim -0.06 0.052 -1.2 -0.16, 0.04 0.2
Class of Trangression




    Abandonment
    Betrayal -0.02 0.029 -0.84 -0.08, 0.03 0.4
    Harm -0.03 0.026 -1.3 -0.08, 0.02 0.2
    Humiliation 0.01 0.027 0.29 -0.05, 0.06 0.8
    Injustice -0.02 0.027 -0.69 -0.07, 0.03 0.5
Emotion




    Anger
    Disgust -0.01 0.027 -0.22 -0.06, 0.05 0.8
    Fear 0.05 0.027 2.0 0.00, 0.11 0.046*
    Sadness 0.00 0.027 -0.07 -0.05, 0.05 >0.9
    Neutral 0.06 0.027 2.2 0.01, 0.11 0.026*
    Joy 0.01 0.027 0.47 -0.04, 0.07 0.6
Condition * Class of Trangression




    Victim * Betrayal 0.09 0.040 2.1 0.01, 0.17 0.032*
    Victim * Harm 0.07 0.036 2.1 0.00, 0.14 0.038*
    Victim * Humiliation 0.02 0.038 0.54 -0.05, 0.09 0.6
    Victim * Injustice 0.06 0.037 1.5 -0.02, 0.13 0.13
Condition * Emotion




    Victim * Disgust 0.10 0.038 2.6 0.02, 0.17 0.010**
    Victim * Fear 0.02 0.038 0.62 -0.05, 0.10 0.5
    Victim * Sadness 0.01 0.037 0.27 -0.06, 0.08 0.8
    Victim * Neutral 0.07 0.038 1.9 0.00, 0.15 0.063
    Victim * Joy -0.01 0.037 -0.34 -0.09, 0.06 0.7
Class of Trangression * Emotion




    Betrayal * Disgust 0.03 0.041 0.83 -0.05, 0.11 0.4
    Harm * Disgust 0.06 0.036 1.7 -0.01, 0.13 0.089
    Humiliation * Disgust 0.01 0.038 0.19 -0.07, 0.08 0.8
    Injustice * Disgust 0.03 0.038 0.84 -0.04, 0.11 0.4
    Betrayal * Fear 0.02 0.041 0.49 -0.06, 0.10 0.6
    Harm * Fear 0.03 0.036 0.84 -0.04, 0.10 0.4
    Humiliation * Fear 0.01 0.038 0.15 -0.07, 0.08 0.9
    Injustice * Fear 0.04 0.038 1.0 -0.03, 0.11 0.3
    Betrayal * Sadness 0.07 0.041 1.7 -0.01, 0.15 0.086
    Harm * Sadness 0.05 0.036 1.5 -0.02, 0.12 0.14
    Humiliation * Sadness 0.05 0.038 1.4 -0.02, 0.13 0.2
    Injustice * Sadness 0.09 0.038 2.5 0.02, 0.17 0.013*
    Betrayal * Neutral 0.05 0.041 1.1 -0.04, 0.13 0.3
    Harm * Neutral 0.05 0.036 1.4 -0.02, 0.12 0.2
    Humiliation * Neutral 0.01 0.038 0.19 -0.07, 0.08 0.8
    Injustice * Neutral 0.10 0.039 2.6 0.02, 0.17 0.011*
    Betrayal * Joy -0.03 0.041 -0.74 -0.11, 0.05 0.5
    Harm * Joy -0.02 0.036 -0.65 -0.09, 0.05 0.5
    Humiliation * Joy -0.03 0.038 -0.84 -0.11, 0.04 0.4
    Injustice * Joy -0.01 0.038 -0.28 -0.08, 0.06 0.8
Condition * Class of Trangression * Emotion




    Victim * Betrayal * Disgust -0.11 0.057 -1.9 -0.22, 0.00 0.056
    Victim * Harm * Disgust -0.08 0.050 -1.6 -0.18, 0.02 0.11
    Victim * Humiliation * Disgust -0.07 0.053 -1.4 -0.18, 0.03 0.2
    Victim * Injustice * Disgust -0.10 0.053 -1.8 -0.20, 0.01 0.069
    Victim * Betrayal * Fear -0.04 0.057 -0.67 -0.15, 0.07 0.5
    Victim * Harm * Fear -0.07 0.050 -1.3 -0.16, 0.03 0.2
    Victim * Humiliation * Fear 0.01 0.054 0.12 -0.10, 0.11 >0.9
    Victim * Injustice * Fear 0.00 0.053 0.07 -0.10, 0.11 >0.9
    Victim * Betrayal * Sadness -0.05 0.057 -0.94 -0.17, 0.06 0.3
    Victim * Harm * Sadness -0.08 0.050 -1.5 -0.17, 0.02 0.13
    Victim * Humiliation * Sadness -0.03 0.053 -0.56 -0.13, 0.07 0.6
    Victim * Injustice * Sadness -0.09 0.053 -1.6 -0.19, 0.02 0.10
    Victim * Betrayal * Neutral -0.11 0.058 -1.9 -0.23, 0.00 0.052
    Victim * Harm * Neutral -0.13 0.051 -2.6 -0.23, -0.03 0.009**
    Victim * Humiliation * Neutral -0.06 0.054 -1.1 -0.16, 0.05 0.3
    Victim * Injustice * Neutral -0.11 0.054 -2.0 -0.21, 0.00 0.046*
    Victim * Betrayal * Joy -0.05 0.057 -0.96 -0.17, 0.06 0.3
    Victim * Harm * Joy -0.04 0.050 -0.79 -0.14, 0.06 0.4
    Victim * Humiliation * Joy -0.01 0.053 -0.10 -0.11, 0.10 >0.9
    Victim * Injustice * Joy -0.02 0.053 -0.44 -0.13, 0.08 0.7
AIC = 13,180; σ = 0.333
1 SE = Standard Error, CI = Confidence Interval
2 *p<0.05; **p<0.01; ***p<0.001

Anova & conditional and marginal coefficient of determination

Anova(class, type = 3, ddf = "Satterthwaite")
Analysis of Deviance Table (Type III Wald chisquare tests)

Response: log(rt_net)
                               Chisq Df Pr(>Chisq)    
(Intercept)               34694.8367  1    < 2e-16 ***
condition                     1.4504  1    0.22846    
newclass                      3.4014  4    0.49303    
newemo                       11.8516  5    0.03688 *  
condition:newclass            7.2342  4    0.12402    
condition:newemo             13.1671  5    0.02186 *  
newclass:newemo              22.9860 20    0.28948    
condition:newclass:newemo    16.6041 20    0.67851    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(r.squaredGLMM(class, method = "marginal"), 4)
       R2m    R2c
[1,] 0.012 0.4407
  • Main effect of Emotion \[\chi^2(5) = 11.8516, p = .037\]

Variance explained by the model: \[R^2_m = 1.2\% \text{ (fixed)}\] \[R^2_c = 44.07\% \text{ (fixed + random)}\]

Pairwise comparisons & estimated marginal means

emmeans(class, pairwise ~ newemo, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 newemo  response   SE  df asymp.LCL asymp.UCL
 Anger        938 21.5 Inf       897       981
 Disgust      970 22.3 Inf       927      1015
 Fear        1010 23.2 Inf       966      1057
 Sadness      969 22.3 Inf       926      1013
 Neutral     1031 23.7 Inf       985      1078
 Joy          915 21.0 Inf       874       957

Results are averaged over the levels of: condition, newclass 
Degrees-of-freedom method: asymptotic 
Confidence level used: 0.95 
Intervals are back-transformed from the log scale 

$contrasts
 contrast          ratio      SE  df null z.ratio p.value
 Anger / Disgust   0.967 0.00821 Inf    1  -3.962  0.0011
 Anger / Fear      0.928 0.00791 Inf    1  -8.719  <.0001
 Anger / Sadness   0.968 0.00819 Inf    1  -3.833  0.0019
 Anger / Neutral   0.910 0.00779 Inf    1 -11.042  <.0001
 Anger / Joy       1.025 0.00866 Inf    1   2.967  0.0452
 Disgust / Fear    0.960 0.00821 Inf    1  -4.747  <.0001
 Disgust / Sadness 1.001 0.00851 Inf    1   0.143  1.0000
 Disgust / Neutral 0.941 0.00810 Inf    1  -7.082  <.0001
 Disgust / Joy     1.060 0.00900 Inf    1   6.916  <.0001
 Fear / Sadness    1.043 0.00888 Inf    1   4.908  <.0001
 Fear / Neutral    0.980 0.00845 Inf    1  -2.360  0.2743
 Fear / Joy        1.104 0.00940 Inf    1  11.669  <.0001
 Sadness / Neutral 0.940 0.00806 Inf    1  -7.253  <.0001
 Sadness / Joy     1.059 0.00895 Inf    1   6.800  <.0001
 Neutral / Joy     1.127 0.00965 Inf    1  13.977  <.0001

Results are averaged over the levels of: condition, newclass 
Degrees-of-freedom method: asymptotic 
P value adjustment: bonferroni method for 15 tests 
Tests are performed on the log scale 

Plot all interaction effects

plotclass = ggpredict(class, terms = c("newemo"), ci_level = 0.95) %>%
  plot() +
  labs(x = "Emotion", y = "Reaction Time (ms)", colour = "Emotion", title = "", element_text(size = 14)) +
  scale_fill_Publication() +
  scale_colour_Publication() +
  theme_Publication()

plotclass

Full mixed-effect model without condition

class2 = lmer(log(rt_net) ~ newclass * newemo + (1|number_ID) + (1|item),
              na.action = na.omit,
              data = data)
summary(class2)

Summary

tbl_regression(class2,
               label = list(newemo ~ "Emotion",
                            newclass ~ "Class of Trangression")) %>%
  modify_column_unhide(column = std.error) %>%
  modify_column_unhide(column = statistic) %>%
  modify_header(label = "**Variable**") %>%
  bold_p() %>%
  modify_fmt_fun(statistic ~ style_sigfig) %>%
  add_significance_stars(hide_ci = FALSE,
                         hide_p = FALSE,
                         pattern = "{p.value}{stars}") %>%
  add_glance_source_note(label = list(sigma ~ "\U03C3"),
                         include = c(AIC, sigma))
Variable Beta SE1 Statistic 95% CI1 p-value2
Class of Trangression




    Abandonment
    Betrayal 0.02 0.020 0.99 -0.02, 0.06 0.3
    Harm 0.00 0.018 0.22 -0.03, 0.04 0.8
    Humiliation 0.02 0.019 0.93 -0.02, 0.06 0.4
    Injustice 0.01 0.019 0.52 -0.03, 0.05 0.6
Emotion




    Anger
    Disgust 0.04 0.019 2.3 0.01, 0.08 0.023*
    Fear 0.06 0.019 3.4 0.03, 0.10 <0.001***
    Sadness 0.00 0.019 0.14 -0.03, 0.04 0.9
    Neutral 0.10 0.019 5.1 0.06, 0.13 <0.001***
    Joy 0.01 0.019 0.30 -0.03, 0.04 0.8
Class of Trangression * Emotion




    Betrayal * Disgust -0.02 0.029 -0.73 -0.08, 0.04 0.5
    Harm * Disgust 0.02 0.025 0.82 -0.03, 0.07 0.4
    Humiliation * Disgust -0.03 0.027 -1.1 -0.08, 0.02 0.3
    Injustice * Disgust -0.02 0.027 -0.63 -0.07, 0.04 0.5
    Betrayal * Fear 0.00 0.029 0.01 -0.06, 0.06 >0.9
    Harm * Fear 0.00 0.025 -0.14 -0.05, 0.05 0.9
    Humiliation * Fear 0.01 0.027 0.33 -0.04, 0.06 0.7
    Injustice * Fear 0.04 0.027 1.5 -0.01, 0.09 0.13
    Betrayal * Sadness 0.04 0.028 1.5 -0.01, 0.10 0.14
    Harm * Sadness 0.01 0.025 0.60 -0.03, 0.06 0.6
    Humiliation * Sadness 0.04 0.026 1.4 -0.01, 0.09 0.2
    Injustice * Sadness 0.05 0.026 1.9 0.00, 0.10 0.060
    Betrayal * Neutral -0.01 0.029 -0.43 -0.07, 0.04 0.7
    Harm * Neutral -0.02 0.025 -0.71 -0.07, 0.03 0.5
    Humiliation * Neutral -0.02 0.027 -0.81 -0.07, 0.03 0.4
    Injustice * Neutral 0.04 0.027 1.6 -0.01, 0.10 0.11
    Betrayal * Joy -0.06 0.028 -2.0 -0.11, 0.00 0.041*
    Harm * Joy -0.04 0.025 -1.7 -0.09, 0.01 0.090
    Humiliation * Joy -0.03 0.027 -1.3 -0.09, 0.02 0.2
    Injustice * Joy -0.02 0.026 -0.83 -0.07, 0.03 0.4
AIC = 13,006; σ = 0.333
1 SE = Standard Error, CI = Confidence Interval
2 *p<0.05; **p<0.01; ***p<0.001

Anova & conditional and marginal coefficient of determination

Anova(class2, type = 3)
Analysis of Deviance Table (Type III Wald chisquare tests)

Response: log(rt_net)
                     Chisq Df Pr(>Chisq)    
(Intercept)     69581.3348  1  < 2.2e-16 ***
newclass            1.5656  4    0.81495    
newemo             43.6176  5  2.769e-08 ***
newclass:newemo    40.6012 20    0.00419 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(r.squaredGLMM(class2, method = "marginal"), 4)
        R2m    R2c
[1,] 0.0099 0.4383
  • Main effect of Emotion \[\chi^2(5) = 43.6176, p < .001\]
  • Interaction between CLass and Emotion \[\chi^2(20) = 43.6176, p < .001\]

Variance explained by the model: \[R^2_m = 0.99\% \text{ (fixed)}\] \[R^2_c = 43.83\% \text{ (fixed + random)}\]

Difference between the two models

anova(class, class2)
Data: data
Models:
class2: log(rt_net) ~ newclass * newemo + (1 | number_ID) + (1 | item)
class: log(rt_net) ~ condition * newclass * newemo + (1 | number_ID) + (1 | item)
       npar   AIC   BIC  logLik deviance  Chisq Df Pr(>Chisq)  
class2   33 12807 13066 -6370.6    12741                       
class    63 12823 13317 -6348.4    12697 44.335 30    0.04445 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
lrtest(class2, class)
Likelihood ratio test

Model 1: log(rt_net) ~ newclass * newemo + (1 | number_ID) + (1 | item)
Model 2: log(rt_net) ~ condition * newclass * newemo + (1 | number_ID) + 
    (1 | item)
  #Df  LogLik Df  Chisq Pr(>Chisq)    
1  33 -6470.0                         
2  63 -6526.8 30 113.49  1.234e-11 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • No significant difference between the 2 (ANOVA)
  • Model with condition better than the one without: \[X^2(30) = 113.5, p < .001\]

RT with Condition and Class (preregistered)

exprt1 = lmer(log(rt_net) ~ condition * newclass + (1|number_ID) + (1|item),
           na.action = na.omit,
           data = data)

Summary

tbl_regression(exprt1,
               label = list(condition ~ "Condition",
                            newclass ~ "Class of Trangression")) %>%
  modify_column_unhide(column = std.error) %>%
  modify_column_unhide(column = statistic) %>%
  modify_header(label = "**Variable**") %>%
  bold_p() %>%
  modify_fmt_fun(statistic ~ style_sigfig) %>%
  add_significance_stars(hide_ci = FALSE,
                         hide_p = FALSE,
                         pattern = "{p.value}{stars}") %>%
  add_glance_source_note(label = list(sigma ~ "\U03C3"),
                         include = c(AIC, sigma))
Variable Beta SE1 Statistic 95% CI1 p-value2
Condition




    Perpetrator
    Victim -0.03 0.046 -0.69 -0.12, 0.06 0.5
Class of Trangression




    Abandonment
    Betrayal 0.00 0.013 -0.09 -0.03, 0.02 >0.9
    Harm -0.01 0.011 -0.47 -0.03, 0.02 0.6
    Humiliation 0.01 0.012 1.3 -0.01, 0.04 0.2
    Injustice 0.02 0.012 1.9 0.00, 0.05 0.063
Condition * Class of Trangression




    Victim * Betrayal 0.03 0.017 1.5 -0.01, 0.06 0.13
    Victim * Harm 0.01 0.015 0.62 -0.02, 0.04 0.5
    Victim * Humiliation -0.01 0.016 -0.35 -0.04, 0.03 0.7
    Victim * Injustice 0.00 0.015 0.32 -0.03, 0.04 0.7
AIC = 13,146; σ = 0.335
1 SE = Standard Error, CI = Confidence Interval
2 *p<0.05; **p<0.01; ***p<0.001

Anova & conditional and marginal coefficient of determination

Anova(exprt1, type = 3)
Analysis of Deviance Table (Type III Wald chisquare tests)

Response: log(rt_net)
                        Chisq Df Pr(>Chisq)    
(Intercept)        44601.1450  1     <2e-16 ***
condition              0.4774  1     0.4896    
newclass               8.3150  4     0.0807 .  
condition:newclass     3.7470  4     0.4413    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(r.squaredGLMM(exprt1, method = "marginal"), 4)
        R2m  R2c
[1,] 0.0014 0.43

No significant effect

Variance explained by the model: \[R^2_m = 0.14\% \text{ (fixed)}\] \[R^2_c = 43.00\% \text{ (fixed + random)}\]

Appropriateness with Condition and Class (preregistered)

exphit1 = glmer(score ~ condition * newclass + (1|number_ID) + (1|item),
          na.action = na.omit,
          data = data,
          family = binomial,
          control = glmerControl(optimizer = "bobyqa"))

Summary

tbl_regression(exphit1,
               label = list(condition ~ "Condition",
                            newclass ~ "Class of Transgression")) %>%
  modify_column_unhide(column = std.error) %>%
  modify_column_unhide(column = statistic) %>%
  modify_header(label = "**Variable**") %>%
  bold_p() %>%
  modify_fmt_fun(statistic ~ style_sigfig) %>%
  add_significance_stars(hide_ci = FALSE,
                         hide_p = FALSE,
                         pattern = "{p.value}{stars}") %>%
  add_glance_source_note(label = list(sigma ~ "\U03C3"),
                         include = c(AIC, sigma))
Variable log(OR)1 SE1 Statistic 95% CI1 p-value2
Condition




    Perpetrator
    Victim 0.08 0.280 0.28 -0.47, 0.63 0.8
Class of Transgression




    Abandonment
    Betrayal -0.08 0.127 -0.60 -0.33, 0.17 0.6
    Harm 0.31 0.118 2.6 0.08, 0.54 0.008**
    Humiliation -0.04 0.117 -0.33 -0.27, 0.19 0.7
    Injustice -0.19 0.122 -1.6 -0.43, 0.05 0.12
Condition * Class of Transgression




    Victim * Betrayal -0.01 0.140 -0.09 -0.29, 0.26 >0.9
    Victim * Harm 0.32 0.132 2.4 0.06, 0.58 0.015*
    Victim * Humiliation 0.06 0.132 0.47 -0.20, 0.32 0.6
    Victim * Injustice 0.21 0.130 1.6 -0.05, 0.46 0.11
AIC = 14,895; σ = 1.00
1 OR = Odds Ratio, SE = Standard Error, CI = Confidence Interval
2 *p<0.05; **p<0.01; ***p<0.001

Anova & conditional and marginal coefficient of determination

Anova(exphit1, type = 3)
Analysis of Deviance Table (Type III Wald chisquare tests)

Response: score
                      Chisq Df Pr(>Chisq)    
(Intercept)        103.0256  1  < 2.2e-16 ***
condition            0.0763  1  0.7824129    
newclass            20.1944  4  0.0004571 ***
condition:newclass   9.2896  4  0.0542540 .  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(r.squaredGLMM(exphit1, method = "marginal"), 4)
               R2m    R2c
theoretical 0.0106 0.4753
delta       0.0069 0.3083
  • Main effect of Class \[\chi^2(4) = 20.194, p < .001\]

Variance explained by the model: \[R^2_m = 0.69\% \text{ (fixed)}\] \[R^2_c = 30.83\% \text{ (fixed + random)}\]

Pairwise comparisons (estimated marginal means and pairwise comparisons)

emmeans(exphit1, pairwise ~ newclass, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 newclass     prob      SE  df asymp.LCL asymp.UCL
 Abandonment 0.895 0.01408 Inf     0.864     0.920
 Betrayal    0.887 0.01551 Inf     0.853     0.914
 Harm        0.932 0.00959 Inf     0.910     0.948
 Humiliation 0.894 0.01414 Inf     0.863     0.919
 Injustice   0.887 0.01534 Inf     0.853     0.913

Results are averaged over the levels of: condition 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
 contrast                  odds.ratio     SE  df null z.ratio p.value
 Abandonment / Betrayal         1.086 0.1111 Inf    1   0.808  1.0000
 Abandonment / Harm             0.624 0.0625 Inf    1  -4.706  <.0001
 Abandonment / Humiliation      1.008 0.0929 Inf    1   0.086  1.0000
 Abandonment / Injustice        1.090 0.1125 Inf    1   0.835  1.0000
 Betrayal / Harm                0.575 0.0616 Inf    1  -5.166  <.0001
 Betrayal / Humiliation         0.928 0.0931 Inf    1  -0.745  1.0000
 Betrayal / Injustice           1.004 0.1105 Inf    1   0.032  1.0000
 Harm / Humiliation             1.615 0.1609 Inf    1   4.811  <.0001
 Harm / Injustice               1.746 0.1822 Inf    1   5.343  <.0001
 Humiliation / Injustice        1.081 0.1110 Inf    1   0.762  1.0000

Results are averaged over the levels of: condition 
P value adjustment: bonferroni method for 10 tests 
Tests are performed on the log odds ratio scale 

Plot all interaction effects

plotexphit1 = ggpredict(exphit1, terms = c("newclass"), ci_level = 0.95) %>%
  plot() +
  labs(x = "Class of Transgression", y = "Appropriate/Inappropriate Rating Likelihood", colour = "Class of Transgression", title = "", element_text(size = 14)) +
  scale_fill_Publication() +
  scale_colour_Publication() +
  theme_Publication() +
  scale_y_continuous(breaks = c(0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1))

plotexphit1

RT with Condition and Class + covariates (preregistered)

Full mixed-effect model

fullcov = lmer(log(rt_net) ~ condition * newemo + age + newgender + political_orientation + (1|number_ID) + (1|item),
           na.action = na.omit,
           data = data)

Summary

tbl_regression(fullcov,
               label = list(condition ~ "Condition",
                            newemo ~ "Emotion",
                            age ~ "Age",
                            newgender ~ "Sex",
                            political_orientation ~ "Political Orientation (1-Liberal to 7-Conservative)")) %>%
  modify_column_unhide(column = std.error) %>%
  modify_column_unhide(column = statistic) %>%
  modify_header(label = "**Variable**") %>%
  bold_p() %>%
  modify_fmt_fun(statistic ~ style_sigfig) %>%
  add_significance_stars(hide_ci = FALSE,
                         hide_p = FALSE,
                         pattern = "{p.value}{stars}") %>%
  add_glance_source_note(label = list(sigma ~ "\U03C3"),
                         include = c(AIC, sigma))
Variable Beta SE1 Statistic 95% CI1 p-value2
Condition




    Perpetrator
    Victim -0.01 0.047 -0.23 -0.10, 0.08 0.8
Emotion




    Anger
    Disgust 0.02 0.012 1.8 0.00, 0.05 0.069
    Fear 0.07 0.012 6.1 0.05, 0.10 <0.001***
    Sadness 0.05 0.012 4.3 0.03, 0.08 <0.001***
    Neutral 0.10 0.012 8.0 0.07, 0.12 <0.001***
    Joy -0.01 0.012 -0.50 -0.03, 0.02 0.6
Age 0.00 0.002 0.63 0.00, 0.00 0.5
Sex




    Female
    Male 0.00 0.047 -0.07 -0.10, 0.09 >0.9
Political Orientation (1-Liberal to 7-Conservative)




    1
    2 -0.07 0.079 -0.88 -0.23, 0.09 0.4
    3 -0.07 0.092 -0.78 -0.25, 0.11 0.4
    4 0.00 0.082 0.00 -0.16, 0.16 >0.9
    5 -0.04 0.093 -0.38 -0.22, 0.15 0.7
    6 0.08 0.102 0.79 -0.12, 0.28 0.4
    7 -0.21 0.124 -1.7 -0.46, 0.04 0.094
Condition * Emotion




    Victim * Disgust 0.03 0.017 1.7 0.00, 0.06 0.084
    Victim * Fear 0.00 0.017 0.28 -0.03, 0.04 0.8
    Victim * Sadness -0.04 0.017 -2.3 -0.07, -0.01 0.020*
    Victim * Neutral -0.01 0.017 -0.52 -0.04, 0.02 0.6
    Victim * Joy -0.04 0.017 -2.2 -0.07, 0.00 0.030*
AIC = 12,828; σ = 0.333
1 SE = Standard Error, CI = Confidence Interval
2 *p<0.05; **p<0.01; ***p<0.001

Anova & conditional and marginal coefficient of determination

Anova(fullcov, type = 3, ddf = "Satterthwaite")
Analysis of Deviance Table (Type III Wald chisquare tests)

Response: log(rt_net)
                          Chisq Df Pr(>Chisq)    
(Intercept)           4920.5044  1  < 2.2e-16 ***
condition                0.0525  1  0.8187078    
newemo                 117.2043  5  < 2.2e-16 ***
age                      0.3917  1  0.5314247    
newgender                0.0048  1  0.9447705    
political_orientation    6.8878  6  0.3313502    
condition:newemo        23.8544  5  0.0002316 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(r.squaredGLMM(fullcov, method = "marginal"), 4)
        R2m    R2c
[1,] 0.0277 0.4524
  • Main effect of Emotion \[\chi^2(5) = 117.204, p < .001\]
  • Interaction of Emotion and Condition \[\chi^2(5) = 23.854, p < .001\]

Variance explained by the model: \[R^2_m = 2.77\% \text{ (fixed)}\] \[R^2_c = 45.24\% \text{ (fixed)}\]

Pairwise comparisons (estimated marginal means and pairwise comparisons)

emmeans(fullcov, pairwise ~ newemo, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 newemo  response   SE  df asymp.LCL asymp.UCL
 Anger        929 24.9 Inf       881       979
 Disgust      963 25.9 Inf       914      1015
 Fear        1001 26.9 Inf       950      1056
 Sadness      959 25.7 Inf       910      1011
 Neutral     1020 27.4 Inf       968      1075
 Joy          906 24.3 Inf       860       955

Results are averaged over the levels of: condition, newgender, political_orientation 
Degrees-of-freedom method: asymptotic 
Confidence level used: 0.95 
Intervals are back-transformed from the log scale 

$contrasts
 contrast          ratio      SE  df null z.ratio p.value
 Anger / Disgust   0.964 0.00814 Inf    1  -4.328  0.0002
 Anger / Fear      0.927 0.00785 Inf    1  -8.929  <.0001
 Anger / Sadness   0.968 0.00814 Inf    1  -3.812  0.0021
 Anger / Neutral   0.910 0.00775 Inf    1 -11.016  <.0001
 Anger / Joy       1.025 0.00860 Inf    1   2.886  0.0585
 Disgust / Fear    0.962 0.00817 Inf    1  -4.598  0.0001
 Disgust / Sadness 1.004 0.00847 Inf    1   0.532  1.0000
 Disgust / Neutral 0.944 0.00807 Inf    1  -6.699  <.0001
 Disgust / Joy     1.063 0.00895 Inf    1   7.212  <.0001
 Fear / Sadness    1.045 0.00884 Inf    1   5.147  <.0001
 Fear / Neutral    0.982 0.00841 Inf    1  -2.122  0.5078
 Fear / Joy        1.105 0.00934 Inf    1  11.814  <.0001
 Sadness / Neutral 0.940 0.00800 Inf    1  -7.255  <.0001
 Sadness / Joy     1.058 0.00887 Inf    1   6.707  <.0001
 Neutral / Joy     1.125 0.00956 Inf    1  13.890  <.0001

Results are averaged over the levels of: condition, newgender, political_orientation 
Degrees-of-freedom method: asymptotic 
P value adjustment: bonferroni method for 15 tests 
Tests are performed on the log scale 
emmeans(fullcov, pairwise ~ newemo|condition, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
condition = Perpetrator:
 newemo  response   SE  df asymp.LCL asymp.UCL
 Anger        934 34.0 Inf       869      1003
 Disgust      954 34.8 Inf       889      1025
 Fear        1005 36.6 Inf       935      1079
 Sadness      983 35.8 Inf       915      1056
 Neutral     1030 37.6 Inf       959      1106
 Joy          928 33.8 Inf       864       997

condition = Victim:
 newemo  response   SE  df asymp.LCL asymp.UCL
 Anger        924 32.5 Inf       862       990
 Disgust      972 34.3 Inf       907      1042
 Fear         998 35.2 Inf       932      1070
 Sadness      935 32.9 Inf       873      1002
 Neutral     1010 35.6 Inf       942      1082
 Joy          885 31.2 Inf       826       948

Results are averaged over the levels of: newgender, political_orientation 
Degrees-of-freedom method: asymptotic 
Confidence level used: 0.95 
Intervals are back-transformed from the log scale 

$contrasts
condition = Perpetrator:
 contrast          ratio     SE  df null z.ratio p.value
 Anger / Disgust   0.978 0.0118 Inf    1  -1.820  1.0000
 Anger / Fear      0.929 0.0112 Inf    1  -6.084  <.0001
 Anger / Sadness   0.950 0.0114 Inf    1  -4.286  0.0003
 Anger / Neutral   0.906 0.0111 Inf    1  -8.047  <.0001
 Anger / Joy       1.006 0.0121 Inf    1   0.500  1.0000
 Disgust / Fear    0.950 0.0115 Inf    1  -4.253  0.0003
 Disgust / Sadness 0.971 0.0117 Inf    1  -2.461  0.2077
 Disgust / Neutral 0.927 0.0113 Inf    1  -6.236  <.0001
 Disgust / Joy     1.028 0.0124 Inf    1   2.321  0.3046
 Fear / Sadness    1.022 0.0123 Inf    1   1.791  1.0000
 Fear / Neutral    0.975 0.0119 Inf    1  -2.044  0.6148
 Fear / Joy        1.082 0.0130 Inf    1   6.591  <.0001
 Sadness / Neutral 0.955 0.0117 Inf    1  -3.808  0.0021
 Sadness / Joy     1.059 0.0127 Inf    1   4.791  <.0001
 Neutral / Joy     1.110 0.0135 Inf    1   8.551  <.0001

condition = Victim:
 contrast          ratio     SE  df null z.ratio p.value
 Anger / Disgust   0.950 0.0112 Inf    1  -4.327  0.0002
 Anger / Fear      0.925 0.0110 Inf    1  -6.547  <.0001
 Anger / Sadness   0.988 0.0116 Inf    1  -1.060  1.0000
 Anger / Neutral   0.915 0.0109 Inf    1  -7.526  <.0001
 Anger / Joy       1.043 0.0122 Inf    1   3.621  0.0044
 Disgust / Fear    0.974 0.0116 Inf    1  -2.241  0.3754
 Disgust / Sadness 1.039 0.0122 Inf    1   3.284  0.0153
 Disgust / Neutral 0.963 0.0115 Inf    1  -3.202  0.0205
 Disgust / Joy     1.098 0.0129 Inf    1   7.939  <.0001
 Fear / Sadness    1.068 0.0127 Inf    1   5.518  <.0001
 Fear / Neutral    0.989 0.0119 Inf    1  -0.949  1.0000
 Fear / Joy        1.128 0.0134 Inf    1  10.138  <.0001
 Sadness / Neutral 0.926 0.0110 Inf    1  -6.496  <.0001
 Sadness / Joy     1.056 0.0123 Inf    1   4.694  <.0001
 Neutral / Joy     1.141 0.0135 Inf    1  11.131  <.0001

Results are averaged over the levels of: newgender, political_orientation 
Degrees-of-freedom method: asymptotic 
P value adjustment: bonferroni method for 15 tests 
Tests are performed on the log scale 

Plot all interaction effects

plotfullcov = ggpredict(fullcov, terms = c("newemo", "condition"), ci_level = 0.95) %>%
  plot() +
  labs(x = "Emotion", y = "Reaction Time (ms)", colour = "Condition", title = "", element_text(size = 14)) +
  scale_fill_Publication() +
  scale_colour_Publication() +
  theme_Publication() +
  scale_y_continuous(breaks = c(800, 850, 900, 950, 1000, 1050, 1100, 1150, 1200, 1250))

plotfullcov

Appropriateness with Condition and Class + covariates (preregistered)

Full mixed-effect model

emocov = glmer(score ~ newemo * condition + age + newgender + political_orientation + (1|number_ID) + (1|item),
          data = data,
          family = binomial,
          na.action = na.omit,
          control = glmerControl(optimizer = "bobyqa"))

Summary

tbl_regression(emocov,
               label = list(condition ~ "Condition",
                            newemo ~ "Emotion",
                            age ~ "Age",
                            newgender ~ "Sex",
                            political_orientation ~ "Political Orientation (1-Liberal to 7-Conservative)")) %>%
  modify_column_unhide(column = std.error) %>%
  modify_column_unhide(column = statistic) %>%
  modify_header(label = "**Variable**") %>%
  bold_p() %>%
  modify_fmt_fun(statistic ~ style_sigfig) %>%
  add_significance_stars(hide_ci = FALSE,
                         hide_p = FALSE,
                         pattern = "{p.value}{stars}") %>%
  add_glance_source_note(label = list(sigma ~ "\U03C3"),
                         include = c(AIC, sigma))
Variable log(OR)1 SE1 Statistic 95% CI1 p-value2
Emotion




    Anger
    Disgust -0.23 0.109 -2.1 -0.44, -0.01 0.037*
    Fear -1.0 0.104 -10 -1.2, -0.84 <0.001***
    Sadness -0.94 0.105 -9.0 -1.1, -0.74 <0.001***
    Neutral -1.1 0.104 -11 -1.3, -0.94 <0.001***
    Joy 0.00 0.112 0.01 -0.22, 0.22 >0.9
Condition




    Perpetrator
    Victim 0.40 0.299 1.3 -0.19, 0.99 0.2
Age -0.02 0.010 -2.3 -0.04, 0.00 0.023*
Sex




    Female
    Male -0.08 0.280 -0.29 -0.63, 0.47 0.8
Political Orientation (1-Liberal to 7-Conservative)




    1
    2 0.54 0.472 1.1 -0.38, 1.5 0.3
    3 0.55 0.550 1.0 -0.52, 1.6 0.3
    4 -0.12 0.489 -0.25 -1.1, 0.84 0.8
    5 0.53 0.556 0.95 -0.56, 1.6 0.3
    6 0.58 0.606 0.96 -0.61, 1.8 0.3
    7 -0.41 0.741 -0.56 -1.9, 1.0 0.6
Emotion * Condition




    Disgust * Victim -0.62 0.165 -3.8 -0.94, -0.30 <0.001***
    Fear * Victim -0.60 0.157 -3.9 -0.91, -0.30 <0.001***
    Sadness * Victim 0.88 0.171 5.1 0.54, 1.2 <0.001***
    Neutral * Victim -0.38 0.157 -2.4 -0.69, -0.08 0.015*
    Joy * Victim 0.51 0.188 2.7 0.15, 0.88 0.006**
AIC = 13,995; σ = 1.00
1 OR = Odds Ratio, SE = Standard Error, CI = Confidence Interval
2 *p<0.05; **p<0.01; ***p<0.001

Anova & conditional and marginal coefficient of determination

Anova(emocov, type = 3, ddf = "Satterthwaite")
Analysis of Deviance Table (Type III Wald chisquare tests)

Response: score
                         Chisq Df Pr(>Chisq)    
(Intercept)            32.0324  1  1.516e-08 ***
newemo                265.8679  5  < 2.2e-16 ***
condition               1.7753  1     0.1827    
age                     5.1910  1     0.0227 *  
newgender               0.0863  1     0.7689    
political_orientation   5.8519  6     0.4400    
newemo:condition      148.9757  5  < 2.2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(r.squaredGLMM(emocov, method = "marginal"), 4)
               R2m    R2c
theoretical 0.1060 0.5289
delta       0.0713 0.3558
  • Main effect of Emotion \[\chi^2(5) = 265.849, p < .001\]
  • Main effect of Age \[\chi^2(1) = 5.378, p = .020\]
  • Interaction of Emotion and Condition \[\chi^2(5) = 149.011, p < .001\]

Variance explained by the model: \[R^2_m = 7.16\% \text{ (fixed)}\] \[R^2_c = 35.59\% \text{ (fixed + random)}\]

Pairwise comparisons (estimated marginal means and pairwise comparisons)

emmeans(emocov, pairwise ~ newemo, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 newemo   prob      SE  df asymp.LCL asymp.UCL
 Anger   0.947 0.00897 Inf     0.926     0.962
 Disgust 0.912 0.01400 Inf     0.881     0.936
 Fear    0.823 0.02511 Inf     0.768     0.867
 Sadness 0.915 0.01373 Inf     0.884     0.938
 Neutral 0.824 0.02500 Inf     0.770     0.868
 Joy     0.958 0.00722 Inf     0.942     0.970

Results are averaged over the levels of: condition, newgender, political_orientation 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        1.713 0.1410 Inf    1   6.538  <.0001
 Anger / Fear           3.832 0.3005 Inf    1  17.125  <.0001
 Anger / Sadness        1.658 0.1415 Inf    1   5.923  <.0001
 Anger / Neutral        3.804 0.2988 Inf    1  17.011  <.0001
 Anger / Joy            0.773 0.0725 Inf    1  -2.742  0.0916
 Disgust / Fear         2.237 0.1587 Inf    1  11.352  <.0001
 Disgust / Sadness      0.968 0.0765 Inf    1  -0.413  1.0000
 Disgust / Neutral      2.221 0.1578 Inf    1  11.230  <.0001
 Disgust / Joy          0.451 0.0399 Inf    1  -8.997  <.0001
 Fear / Sadness         0.433 0.0323 Inf    1 -11.235  <.0001
 Fear / Neutral         0.993 0.0651 Inf    1  -0.109  1.0000
 Fear / Joy             0.202 0.0171 Inf    1 -18.846  <.0001
 Sadness / Neutral      2.295 0.1713 Inf    1  11.129  <.0001
 Sadness / Joy          0.466 0.0425 Inf    1  -8.375  <.0001
 Neutral / Joy          0.203 0.0173 Inf    1 -18.742  <.0001

Results are averaged over the levels of: condition, newgender, political_orientation 
P value adjustment: bonferroni method for 15 tests 
Tests are performed on the log odds ratio scale 
emmeans(emocov, pairwise ~ condition, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 condition    prob     SE  df asymp.LCL asymp.UCL
 Perpetrator 0.893 0.0211 Inf     0.844     0.928
 Victim      0.923 0.0152 Inf     0.887     0.948

Results are averaged over the levels of: newemo, newgender, political_orientation 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
 contrast             odds.ratio    SE  df null z.ratio p.value
 Perpetrator / Victim      0.696 0.191 Inf    1  -1.319  0.1871

Results are averaged over the levels of: newemo, newgender, political_orientation 
Tests are performed on the log odds ratio scale 
emmeans(emocov, pairwise ~ newemo|condition, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
condition = Perpetrator:
 newemo   prob      SE  df asymp.LCL asymp.UCL
 Anger   0.936 0.01398 Inf     0.902     0.958
 Disgust 0.921 0.01689 Inf     0.881     0.948
 Fear    0.837 0.03104 Inf     0.767     0.890
 Sadness 0.850 0.02908 Inf     0.784     0.899
 Neutral 0.823 0.03319 Inf     0.748     0.879
 Joy     0.936 0.01397 Inf     0.902     0.958

condition = Victim:
 newemo   prob      SE  df asymp.LCL asymp.UCL
 Anger   0.956 0.00977 Inf     0.932     0.972
 Disgust 0.903 0.01961 Inf     0.857     0.935
 Fear    0.808 0.03411 Inf     0.732     0.866
 Sadness 0.953 0.01033 Inf     0.928     0.970
 Neutral 0.825 0.03173 Inf     0.754     0.879
 Joy     0.973 0.00628 Inf     0.958     0.983

Results are averaged over the levels of: newgender, political_orientation 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
condition = Perpetrator:
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        1.256 0.1371 Inf    1   2.086  0.5546
 Anger / Fear           2.833 0.2951 Inf    1   9.997  <.0001
 Anger / Sadness        2.571 0.2687 Inf    1   9.035  <.0001
 Anger / Neutral        3.141 0.3263 Inf    1  11.021  <.0001
 Anger / Joy            0.999 0.1116 Inf    1  -0.005  1.0000
 Disgust / Fear         2.256 0.2284 Inf    1   8.035  <.0001
 Disgust / Sadness      2.047 0.2081 Inf    1   7.050  <.0001
 Disgust / Neutral      2.502 0.2524 Inf    1   9.086  <.0001
 Disgust / Joy          0.796 0.0869 Inf    1  -2.092  0.5471
 Fear / Sadness         0.907 0.0863 Inf    1  -1.021  1.0000
 Fear / Neutral         1.109 0.1043 Inf    1   1.098  1.0000
 Fear / Joy             0.353 0.0367 Inf    1 -10.003  <.0001
 Sadness / Neutral      1.222 0.1156 Inf    1   2.118  0.5128
 Sadness / Joy          0.389 0.0406 Inf    1  -9.041  <.0001
 Neutral / Joy          0.318 0.0330 Inf    1 -11.027  <.0001

condition = Victim:
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        2.336 0.2878 Inf    1   6.887  <.0001
 Anger / Fear           5.182 0.6075 Inf    1  14.034  <.0001
 Anger / Sadness        1.069 0.1443 Inf    1   0.494  1.0000
 Anger / Neutral        4.607 0.5426 Inf    1  12.971  <.0001
 Anger / Joy            0.598 0.0902 Inf    1  -3.407  0.0099
 Disgust / Fear         2.218 0.2203 Inf    1   8.023  <.0001
 Disgust / Sadness      0.458 0.0554 Inf    1  -6.461  <.0001
 Disgust / Neutral      1.972 0.1973 Inf    1   6.788  <.0001
 Disgust / Joy          0.256 0.0356 Inf    1  -9.798  <.0001
 Fear / Sadness         0.206 0.0237 Inf    1 -13.742  <.0001
 Fear / Neutral         0.889 0.0811 Inf    1  -1.289  1.0000
 Fear / Joy             0.115 0.0155 Inf    1 -16.105  <.0001
 Sadness / Neutral      4.310 0.4974 Inf    1  12.656  <.0001
 Sadness / Joy          0.560 0.0835 Inf    1  -3.893  0.0015
 Neutral / Joy          0.130 0.0175 Inf    1 -15.176  <.0001

Results are averaged over the levels of: newgender, political_orientation 
P value adjustment: bonferroni method for 15 tests 
Tests are performed on the log odds ratio scale 

Plot all interaction effects

plotemocov = ggpredict(emocov, terms = c("age", "condition", "newemo"), ci_level = 0.95) %>%
  plot() +
  labs(x = "Age", y = "Appropriate/Inappropriate Rating Likelihood", colour = "Condition", title = "", element_text(size = 14)) +
  scale_fill_Publication() +
  scale_colour_Publication() +
  theme_Publication() +
  scale_x_continuous(breaks = c(20, 30, 40, 50, 60, 70)) +
  scale_y_continuous(breaks = c(0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1))

plotemocov

2.2 Study 2

2.2.1 Reaction Time

Full mixed-effect model

full2 = lmer(log(rt_net) ~ condition * newemo * scenarios + (1|number_ID) + (1|item),
             na.action = na.omit,
             data = data2)

Summary

tbl_regression(full2,
               label = list(condition ~ "Condition",
                            newemo ~ "Emotion",
                            scenarios ~ "Scenario")) %>%
  modify_column_unhide(column = std.error) %>%
  modify_column_unhide(column = statistic) %>%
  modify_header(label = "**Variable**") %>%
  bold_p() %>%
  modify_fmt_fun(statistic ~ style_sigfig) %>%
  add_significance_stars(hide_ci = FALSE,
                         hide_p = FALSE,
                         pattern = "{p.value}{stars}") %>%
  add_glance_source_note(label = list(sigma ~ "\U03C3"),
                         include = c(AIC, sigma))
Variable Beta SE1 Statistic 95% CI1 p-value2
Condition




    Perpetrator
    Victim -0.05 0.045 -1.2 -0.14, 0.03 0.2
Emotion




    Anger
    Disgust 0.04 0.017 2.4 0.01, 0.08 0.016*
    Sadness 0.02 0.017 0.95 -0.02, 0.05 0.3
    Neutral 0.12 0.018 7.1 0.09, 0.16 <0.001***
Scenario




    Transgression
    Control -0.03 0.024 -1.2 -0.08, 0.02 0.3
Condition * Emotion




    Victim * Disgust 0.00 0.025 0.00 -0.05, 0.05 >0.9
    Victim * Sadness -0.06 0.025 -2.5 -0.11, -0.01 0.013*
    Victim * Neutral -0.03 0.025 -1.0 -0.08, 0.02 0.3
Condition * Scenario




    Victim * Control 0.01 0.026 0.56 -0.04, 0.07 0.6
Emotion * Scenario




    Disgust * Control -0.06 0.026 -2.1 -0.11, 0.00 0.032*
    Sadness * Control -0.02 0.026 -0.67 -0.07, 0.03 0.5
    Neutral * Control -0.08 0.026 -3.3 -0.14, -0.03 0.001**
Condition * Emotion * Scenario




    Victim * Disgust * Control 0.02 0.037 0.55 -0.05, 0.09 0.6
    Victim * Sadness * Control 0.07 0.037 2.0 0.00, 0.15 0.043*
    Victim * Neutral * Control 0.03 0.037 0.84 -0.04, 0.10 0.4
AIC = 8,926; σ = 0.348
1 SE = Standard Error, CI = Confidence Interval
2 *p<0.05; **p<0.01; ***p<0.001

Conditional and marginal coefficient of determination

Anova(full2, type = 3)
Analysis of Deviance Table (Type III Wald chisquare tests)

Response: log(rt_net)
                                Chisq Df Pr(>Chisq)    
(Intercept)                45844.7210  1  < 2.2e-16 ***
condition                      1.4129  1   0.234581    
newemo                        58.0326  3  1.547e-12 ***
scenarios                      1.3310  1   0.248629    
condition:newemo               8.2634  3   0.040871 *  
condition:scenarios            0.3112  1   0.576938    
newemo:scenarios              13.0046  3   0.004627 ** 
condition:newemo:scenarios     4.3598  3   0.225146    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(r.squaredGLMM(full2, method = "marginal"), 4)
        R2m   R2c
[1,] 0.0155 0.339
  • Main effect of Emotion \[\chi^2(3) = 58.033, p < .001\]
  • Interaction of Condition and Emotion \[\chi^2(3) = 8.263, p = .041\]
  • Interaction of Emotion and Scenario \[\chi^2(3) = 13.005, p = .005\]

Variance explained by the model: \[R^2_m = 1.55\% \text{ (fixed)}\] \[R^2_c = 33.90\% \text{ (fixed + random)}\]

Pairwise comparisons & estimated marginal means

emmeans(full2, pairwise ~ newemo, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 newemo  response   SE  df asymp.LCL asymp.UCL
 Anger       1043 23.8 Inf       998      1091
 Disgust     1064 24.3 Inf      1017      1112
 Sadness     1039 23.7 Inf       993      1086
 Neutral     1126 25.7 Inf      1077      1178

Results are averaged over the levels of: condition, scenarios 
Degrees-of-freedom method: asymptotic 
Confidence level used: 0.95 
Intervals are back-transformed from the log scale 

$contrasts
 contrast          ratio      SE  df null z.ratio p.value
 Anger / Disgust   0.981 0.00908 Inf    1  -2.094  0.2176
 Anger / Sadness   1.004 0.00927 Inf    1   0.482  1.0000
 Anger / Neutral   0.926 0.00863 Inf    1  -8.213  <.0001
 Disgust / Sadness 1.024 0.00949 Inf    1   2.572  0.0607
 Disgust / Neutral 0.944 0.00883 Inf    1  -6.113  <.0001
 Sadness / Neutral 0.922 0.00860 Inf    1  -8.680  <.0001

Results are averaged over the levels of: condition, scenarios 
Degrees-of-freedom method: asymptotic 
P value adjustment: bonferroni method for 6 tests 
Tests are performed on the log scale 
emmeans(full2, pairwise ~ scenarios, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 scenarios     response   SE  df asymp.LCL asymp.UCL
 Transgression     1091 25.5 Inf      1042      1142
 Control           1044 25.0 Inf       996      1094

Results are averaged over the levels of: condition, newemo 
Degrees-of-freedom method: asymptotic 
Confidence level used: 0.95 
Intervals are back-transformed from the log scale 

$contrasts
 contrast                ratio     SE  df null z.ratio p.value
 Transgression / Control  1.04 0.0176 Inf    1   2.598  0.0094

Results are averaged over the levels of: condition, newemo 
Degrees-of-freedom method: asymptotic 
Tests are performed on the log scale 
emmeans(full2, pairwise ~ newemo|condition, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
condition = Perpetrator:
 newemo  response   SE  df asymp.LCL asymp.UCL
 Anger       1067 32.9 Inf      1005      1134
 Disgust     1083 33.4 Inf      1019      1150
 Sadness     1076 33.2 Inf      1013      1143
 Neutral     1158 35.7 Inf      1090      1230

condition = Victim:
 newemo  response   SE  df asymp.LCL asymp.UCL
 Anger       1020 32.5 Inf       958      1085
 Disgust     1045 33.3 Inf       982      1112
 Sadness     1003 31.9 Inf       942      1067
 Neutral     1095 34.9 Inf      1029      1166

Results are averaged over the levels of: scenarios 
Degrees-of-freedom method: asymptotic 
Confidence level used: 0.95 
Intervals are back-transformed from the log scale 

$contrasts
condition = Perpetrator:
 contrast          ratio     SE  df null z.ratio p.value
 Anger / Disgust   0.986 0.0127 Inf    1  -1.115  1.0000
 Anger / Sadness   0.992 0.0128 Inf    1  -0.620  1.0000
 Anger / Neutral   0.922 0.0119 Inf    1  -6.308  <.0001
 Disgust / Sadness 1.006 0.0130 Inf    1   0.493  1.0000
 Disgust / Neutral 0.935 0.0121 Inf    1  -5.183  <.0001
 Sadness / Neutral 0.929 0.0121 Inf    1  -5.671  <.0001

condition = Victim:
 contrast          ratio     SE  df null z.ratio p.value
 Anger / Disgust   0.976 0.0130 Inf    1  -1.835  0.3991
 Anger / Sadness   1.017 0.0135 Inf    1   1.275  1.0000
 Anger / Neutral   0.931 0.0125 Inf    1  -5.326  <.0001
 Disgust / Sadness 1.042 0.0138 Inf    1   3.107  0.0113
 Disgust / Neutral 0.954 0.0128 Inf    1  -3.492  0.0029
 Sadness / Neutral 0.916 0.0123 Inf    1  -6.592  <.0001

Results are averaged over the levels of: scenarios 
Degrees-of-freedom method: asymptotic 
P value adjustment: bonferroni method for 6 tests 
Tests are performed on the log scale 
emmeans(full2, pairwise ~ newemo|scenarios, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
scenarios = Transgression:
 newemo  response   SE  df asymp.LCL asymp.UCL
 Anger       1054 25.9 Inf      1004      1106
 Disgust     1099 27.1 Inf      1047      1153
 Sadness     1039 25.6 Inf       990      1090
 Neutral     1178 29.1 Inf      1122      1236

scenarios = Control:
 newemo  response   SE  df asymp.LCL asymp.UCL
 Anger       1033 26.2 Inf       983      1085
 Disgust     1029 26.1 Inf       979      1082
 Sadness     1039 26.3 Inf       988      1091
 Neutral     1077 27.4 Inf      1025      1132

Results are averaged over the levels of: condition 
Degrees-of-freedom method: asymptotic 
Confidence level used: 0.95 
Intervals are back-transformed from the log scale 

$contrasts
scenarios = Transgression:
 contrast          ratio     SE  df null z.ratio p.value
 Anger / Disgust   0.959 0.0120 Inf    1  -3.351  0.0048
 Anger / Sadness   1.015 0.0127 Inf    1   1.163  1.0000
 Anger / Neutral   0.895 0.0113 Inf    1  -8.809  <.0001
 Disgust / Sadness 1.058 0.0133 Inf    1   4.501  <.0001
 Disgust / Neutral 0.933 0.0118 Inf    1  -5.463  <.0001
 Sadness / Neutral 0.882 0.0112 Inf    1  -9.935  <.0001

scenarios = Control:
 contrast          ratio     SE  df null z.ratio p.value
 Anger / Disgust   1.003 0.0137 Inf    1   0.234  1.0000
 Anger / Sadness   0.994 0.0135 Inf    1  -0.414  1.0000
 Anger / Neutral   0.959 0.0132 Inf    1  -3.057  0.0134
 Disgust / Sadness 0.991 0.0135 Inf    1  -0.646  1.0000
 Disgust / Neutral 0.956 0.0132 Inf    1  -3.280  0.0062
 Sadness / Neutral 0.964 0.0132 Inf    1  -2.647  0.0487

Results are averaged over the levels of: condition 
Degrees-of-freedom method: asymptotic 
P value adjustment: bonferroni method for 6 tests 
Tests are performed on the log scale 
emmeans(full2, pairwise ~ scenarios|newemo, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
newemo = Anger:
 scenarios     response   SE  df asymp.LCL asymp.UCL
 Transgression     1054 25.9 Inf      1004      1106
 Control           1033 26.2 Inf       983      1085

newemo = Disgust:
 scenarios     response   SE  df asymp.LCL asymp.UCL
 Transgression     1099 27.1 Inf      1047      1153
 Control           1029 26.1 Inf       979      1082

newemo = Sadness:
 scenarios     response   SE  df asymp.LCL asymp.UCL
 Transgression     1039 25.6 Inf       990      1090
 Control           1039 26.3 Inf       988      1091

newemo = Neutral:
 scenarios     response   SE  df asymp.LCL asymp.UCL
 Transgression     1178 29.1 Inf      1122      1236
 Control           1077 27.4 Inf      1025      1132

Results are averaged over the levels of: condition 
Degrees-of-freedom method: asymptotic 
Confidence level used: 0.95 
Intervals are back-transformed from the log scale 

$contrasts
newemo = Anger:
 contrast                ratio     SE  df null z.ratio p.value
 Transgression / Control  1.02 0.0207 Inf    1   0.999  0.3176

newemo = Disgust:
 contrast                ratio     SE  df null z.ratio p.value
 Transgression / Control  1.07 0.0217 Inf    1   3.216  0.0013

newemo = Sadness:
 contrast                ratio     SE  df null z.ratio p.value
 Transgression / Control  1.00 0.0203 Inf    1   0.005  0.9957

newemo = Neutral:
 contrast                ratio     SE  df null z.ratio p.value
 Transgression / Control  1.09 0.0224 Inf    1   4.373  <.0001

Results are averaged over the levels of: condition 
Degrees-of-freedom method: asymptotic 
Tests are performed on the log scale 

Plot all interaction effects

plotfull2 = ggpredict(full2, terms = c("scenarios", "condition", "newemo"), ci_level = 0.95) %>%
  plot() +
  labs(x = "Scenario", y = "Reaction Time (ms)", colour = "Condition", title = "", element_text(size = 14)) +
  scale_fill_Publication() +
  scale_colour_Publication() +
  theme_Publication() +
  scale_y_continuous(breaks = c(800, 850, 900, 950, 1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, 1400))

plotfull2

2.2.2 Appropriateness

Full generalized mixed-effect model

emo2 = glmer(score ~ scenarios * newemo * condition + (1|number_ID) + (1|item),
             data = data2,
             family = binomial,
             control = glmerControl(optimizer = "bobyqa"))

Summary

tbl_regression(emo2,
               label = list(condition ~ "Condition",
                            newemo ~ "Emotion",
                            scenarios ~ "Scenario")) %>%
  modify_column_unhide(column = std.error) %>%
  modify_column_unhide(column = statistic) %>%
  modify_header(label = "**Variable**") %>%
  bold_p() %>%
  modify_fmt_fun(statistic ~ style_sigfig) %>%
  add_significance_stars(hide_ci = FALSE,
                         hide_p = FALSE,
                         pattern = "{p.value}{stars}") %>%
  add_glance_source_note(label = list(sigma ~ "\U03C3"),
                         include = c(AIC, sigma))
Variable log(OR)1 SE1 Statistic 95% CI1 p-value2
Scenario




    Transgression
    Control 0.28 0.187 1.5 -0.09, 0.65 0.14
Emotion




    Anger
    Disgust -0.27 0.132 -2.1 -0.53, -0.01 0.039*
    Sadness -0.67 0.128 -5.3 -0.92, -0.42 <0.001***
    Neutral -0.36 0.131 -2.8 -0.62, -0.11 0.006**
Condition




    Perpetrator
    Victim 0.39 0.258 1.5 -0.11, 0.90 0.13
Scenario * Emotion




    Control * Disgust 0.50 0.210 2.4 0.09, 0.92 0.017*
    Control * Sadness 0.78 0.206 3.8 0.37, 1.2 <0.001***
    Control * Neutral -0.44 0.196 -2.3 -0.83, -0.06 0.024*
Scenario * Condition




    Control * Victim -0.40 0.218 -1.8 -0.83, 0.03 0.066
Emotion * Condition




    Disgust * Victim -0.15 0.198 -0.76 -0.54, 0.24 0.4
    Sadness * Victim 0.75 0.203 3.7 0.35, 1.1 <0.001***
    Neutral * Victim -0.01 0.198 -0.05 -0.40, 0.38 >0.9
Scenario * Emotion * Condition




    Control * Disgust * Victim -0.05 0.306 -0.17 -0.65, 0.55 0.9
    Control * Sadness * Victim -0.77 0.308 -2.5 -1.4, -0.16 0.013*
    Control * Neutral * Victim 0.07 0.290 0.24 -0.50, 0.64 0.8
AIC = 10,056; σ = 1.00
1 OR = Odds Ratio, SE = Standard Error, CI = Confidence Interval
2 *p<0.05; **p<0.01; ***p<0.001

Anova & conditional and marginal coefficient of determination

Anova(emo2, type = 3)
Analysis of Deviance Table (Type III Wald chisquare tests)

Response: score
                             Chisq Df Pr(>Chisq)    
(Intercept)                78.9721  1  < 2.2e-16 ***
scenarios                   2.2336  1    0.13504    
newemo                     28.6643  3  2.634e-06 ***
condition                   2.3390  1    0.12617    
scenarios:newemo           46.5668  3  4.297e-10 ***
scenarios:condition         3.3879  1    0.06568 .  
newemo:condition           25.5666  3  1.175e-05 ***
scenarios:newemo:condition 10.0046  3    0.01853 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(r.squaredGLMM(emo2, method = "marginal"), 4)
               R2m    R2c
theoretical 0.0285 0.3472
delta       0.0186 0.2264
  • Main effect of Emotion \[\chi^2(3) = 28.663, p < .001\]
  • Interaction between Emotion and Scenario \[\chi^2(3) = 46.567, p < .001\]
  • Interaction between Emotion and Condition \[\chi^2(3) = 25.566, p < .001\]
  • Interaction between Emotion, Condition and Scenario \[\chi^2(3) = 10.004, p = .019\]

Variance explained by the model: \[R^2_m = 1.86\% \text{ (fixed)}\] \[R^2_c = 22.64\% \text{ (fixed + random)}\]

Pairwise comparisons (estimated marginal means and pairwise comparisons)

emmeans(emo2, pairwise ~ newemo, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 newemo   prob     SE  df asymp.LCL asymp.UCL
 Anger   0.875 0.0145 Inf     0.843     0.901
 Disgust 0.862 0.0157 Inf     0.829     0.890
 Sadness 0.863 0.0156 Inf     0.830     0.891
 Neutral 0.798 0.0209 Inf     0.754     0.836

Results are averaged over the levels of: scenarios, condition 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        1.115 0.0853 Inf    1   1.421  0.9320
 Anger / Sadness        1.106 0.0852 Inf    1   1.313  1.0000
 Anger / Neutral        1.771 0.1288 Inf    1   7.857  <.0001
 Disgust / Sadness      0.992 0.0758 Inf    1  -0.099  1.0000
 Disgust / Neutral      1.588 0.1144 Inf    1   6.425  <.0001
 Sadness / Neutral      1.600 0.1161 Inf    1   6.481  <.0001

Results are averaged over the levels of: scenarios, condition 
P value adjustment: bonferroni method for 6 tests 
Tests are performed on the log odds ratio scale 
emmeans(emo2, pairwise ~ scenarios, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 scenarios      prob     SE  df asymp.LCL asymp.UCL
 Transgression 0.839 0.0183 Inf     0.800     0.872
 Control       0.864 0.0167 Inf     0.827     0.893

Results are averaged over the levels of: newemo, condition 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
 contrast                odds.ratio    SE  df null z.ratio p.value
 Transgression / Control      0.824 0.104 Inf    1  -1.539  0.1238

Results are averaged over the levels of: newemo, condition 
Tests are performed on the log odds ratio scale 
emmeans(emo2, pairwise ~ newemo|scenarios, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
scenarios = Transgression:
 newemo   prob     SE  df asymp.LCL asymp.UCL
 Anger   0.870 0.0170 Inf     0.833     0.900
 Disgust 0.826 0.0212 Inf     0.780     0.864
 Sadness 0.833 0.0207 Inf     0.788     0.870
 Neutral 0.823 0.0215 Inf     0.777     0.861

scenarios = Control:
 newemo   prob     SE  df asymp.LCL asymp.UCL
 Anger   0.879 0.0168 Inf     0.842     0.908
 Disgust 0.892 0.0154 Inf     0.858     0.919
 Sadness 0.889 0.0158 Inf     0.854     0.916
 Neutral 0.770 0.0269 Inf     0.713     0.818

Results are averaged over the levels of: condition 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
scenarios = Transgression:
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        1.415 0.1404 Inf    1   3.504  0.0028
 Anger / Sadness        1.347 0.1364 Inf    1   2.942  0.0196
 Anger / Neutral        1.443 0.1430 Inf    1   3.701  0.0013
 Disgust / Sadness      0.952 0.0924 Inf    1  -0.510  1.0000
 Disgust / Neutral      1.020 0.0966 Inf    1   0.204  1.0000
 Sadness / Neutral      1.071 0.1039 Inf    1   0.710  1.0000

scenarios = Control:
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        0.878 0.1024 Inf    1  -1.115  1.0000
 Anger / Sadness        0.909 0.1055 Inf    1  -0.824  1.0000
 Anger / Neutral        2.173 0.2308 Inf    1   7.306  <.0001
 Disgust / Sadness      1.035 0.1221 Inf    1   0.291  1.0000
 Disgust / Neutral      2.474 0.2684 Inf    1   8.353  <.0001
 Sadness / Neutral      2.391 0.2578 Inf    1   8.083  <.0001

Results are averaged over the levels of: condition 
P value adjustment: bonferroni method for 6 tests 
Tests are performed on the log odds ratio scale 
emmeans(emo2, pairwise ~ scenarios|newemo, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
newemo = Anger:
 scenarios      prob     SE  df asymp.LCL asymp.UCL
 Transgression 0.870 0.0170 Inf     0.833     0.900
 Control       0.879 0.0168 Inf     0.842     0.908

newemo = Disgust:
 scenarios      prob     SE  df asymp.LCL asymp.UCL
 Transgression 0.826 0.0212 Inf     0.780     0.864
 Control       0.892 0.0154 Inf     0.858     0.919

newemo = Sadness:
 scenarios      prob     SE  df asymp.LCL asymp.UCL
 Transgression 0.833 0.0207 Inf     0.788     0.870
 Control       0.889 0.0158 Inf     0.854     0.916

newemo = Neutral:
 scenarios      prob     SE  df asymp.LCL asymp.UCL
 Transgression 0.823 0.0215 Inf     0.777     0.861
 Control       0.770 0.0269 Inf     0.713     0.818

Results are averaged over the levels of: condition 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
newemo = Anger:
 contrast                odds.ratio     SE  df null z.ratio p.value
 Transgression / Control      0.925 0.1461 Inf    1  -0.496  0.6200

newemo = Disgust:
 contrast                odds.ratio     SE  df null z.ratio p.value
 Transgression / Control      0.574 0.0900 Inf    1  -3.541  0.0004

newemo = Sadness:
 contrast                odds.ratio     SE  df null z.ratio p.value
 Transgression / Control      0.624 0.0985 Inf    1  -2.989  0.0028

newemo = Neutral:
 contrast                odds.ratio     SE  df null z.ratio p.value
 Transgression / Control      1.392 0.2075 Inf    1   2.220  0.0265

Results are averaged over the levels of: condition 
Tests are performed on the log odds ratio scale 
emmeans(emo2, pairwise ~ newemo|condition, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
condition = Perpetrator:
 newemo   prob     SE  df asymp.LCL asymp.UCL
 Anger   0.864 0.0206 Inf     0.818     0.899
 Disgust 0.861 0.0209 Inf     0.815     0.897
 Sadness 0.827 0.0248 Inf     0.773     0.870
 Neutral 0.779 0.0293 Inf     0.717     0.832

condition = Victim:
 newemo   prob     SE  df asymp.LCL asymp.UCL
 Anger   0.885 0.0186 Inf     0.843     0.917
 Disgust 0.863 0.0213 Inf     0.816     0.900
 Sadness 0.893 0.0175 Inf     0.853     0.923
 Neutral 0.815 0.0268 Inf     0.756     0.862

Results are averaged over the levels of: scenarios 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
condition = Perpetrator:
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        1.020 0.1073 Inf    1   0.193  1.0000
 Anger / Sadness        1.327 0.1364 Inf    1   2.756  0.0351
 Anger / Neutral        1.793 0.1765 Inf    1   5.932  <.0001
 Disgust / Sadness      1.301 0.1346 Inf    1   2.540  0.0665
 Disgust / Neutral      1.757 0.1743 Inf    1   5.681  <.0001
 Sadness / Neutral      1.351 0.1303 Inf    1   3.119  0.0109

condition = Victim:
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        1.218 0.1355 Inf    1   1.773  0.4576
 Anger / Sadness        0.922 0.1058 Inf    1  -0.704  1.0000
 Anger / Neutral        1.749 0.1872 Inf    1   5.222  <.0001
 Disgust / Sadness      0.757 0.0852 Inf    1  -2.471  0.0809
 Disgust / Neutral      1.436 0.1499 Inf    1   3.465  0.0032
 Sadness / Neutral      1.896 0.2056 Inf    1   5.900  <.0001

Results are averaged over the levels of: scenarios 
P value adjustment: bonferroni method for 6 tests 
Tests are performed on the log odds ratio scale 
emmeans(emo2, pairwise ~ scenarios*condition*newemo, type = "response", adjust = "bonferroni")
$emmeans
 scenarios     condition   newemo   prob     SE  df asymp.LCL asymp.UCL
 Transgression Perpetrator Anger   0.846 0.0250 Inf     0.791     0.889
 Control       Perpetrator Anger   0.879 0.0216 Inf     0.830     0.916
 Transgression Victim      Anger   0.891 0.0198 Inf     0.846     0.924
 Control       Victim      Anger   0.879 0.0225 Inf     0.827     0.916
 Transgression Perpetrator Disgust 0.808 0.0294 Inf     0.743     0.859
 Control       Perpetrator Disgust 0.902 0.0184 Inf     0.859     0.933
 Transgression Victim      Disgust 0.843 0.0262 Inf     0.784     0.888
 Control       Victim      Disgust 0.882 0.0220 Inf     0.831     0.918
 Transgression Perpetrator Sadness 0.738 0.0360 Inf     0.662     0.802
 Control       Perpetrator Sadness 0.890 0.0201 Inf     0.844     0.924
 Transgression Victim      Sadness 0.898 0.0188 Inf     0.855     0.930
 Control       Victim      Sadness 0.887 0.0212 Inf     0.839     0.923
 Transgression Perpetrator Neutral 0.793 0.0309 Inf     0.726     0.847
 Control       Perpetrator Neutral 0.765 0.0349 Inf     0.690     0.826
 Transgression Victim      Neutral 0.849 0.0254 Inf     0.793     0.893
 Control       Victim      Neutral 0.774 0.0350 Inf     0.699     0.836

Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
 contrast                                                             
 Transgression Perpetrator Anger / Control Perpetrator Anger          
 Transgression Perpetrator Anger / Transgression Victim Anger         
 Transgression Perpetrator Anger / Control Victim Anger               
 Transgression Perpetrator Anger / Transgression Perpetrator Disgust  
 Transgression Perpetrator Anger / Control Perpetrator Disgust        
 Transgression Perpetrator Anger / Transgression Victim Disgust       
 Transgression Perpetrator Anger / Control Victim Disgust             
 Transgression Perpetrator Anger / Transgression Perpetrator Sadness  
 Transgression Perpetrator Anger / Control Perpetrator Sadness        
 Transgression Perpetrator Anger / Transgression Victim Sadness       
 Transgression Perpetrator Anger / Control Victim Sadness             
 Transgression Perpetrator Anger / Transgression Perpetrator Neutral  
 Transgression Perpetrator Anger / Control Perpetrator Neutral        
 Transgression Perpetrator Anger / Transgression Victim Neutral       
 Transgression Perpetrator Anger / Control Victim Neutral             
 Control Perpetrator Anger / Transgression Victim Anger               
 Control Perpetrator Anger / Control Victim Anger                     
 Control Perpetrator Anger / Transgression Perpetrator Disgust        
 Control Perpetrator Anger / Control Perpetrator Disgust              
 Control Perpetrator Anger / Transgression Victim Disgust             
 Control Perpetrator Anger / Control Victim Disgust                   
 Control Perpetrator Anger / Transgression Perpetrator Sadness        
 Control Perpetrator Anger / Control Perpetrator Sadness              
 Control Perpetrator Anger / Transgression Victim Sadness             
 Control Perpetrator Anger / Control Victim Sadness                   
 Control Perpetrator Anger / Transgression Perpetrator Neutral        
 Control Perpetrator Anger / Control Perpetrator Neutral              
 Control Perpetrator Anger / Transgression Victim Neutral             
 Control Perpetrator Anger / Control Victim Neutral                   
 Transgression Victim Anger / Control Victim Anger                    
 Transgression Victim Anger / Transgression Perpetrator Disgust       
 Transgression Victim Anger / Control Perpetrator Disgust             
 Transgression Victim Anger / Transgression Victim Disgust            
 Transgression Victim Anger / Control Victim Disgust                  
 Transgression Victim Anger / Transgression Perpetrator Sadness       
 Transgression Victim Anger / Control Perpetrator Sadness             
 Transgression Victim Anger / Transgression Victim Sadness            
 Transgression Victim Anger / Control Victim Sadness                  
 Transgression Victim Anger / Transgression Perpetrator Neutral       
 Transgression Victim Anger / Control Perpetrator Neutral             
 Transgression Victim Anger / Transgression Victim Neutral            
 Transgression Victim Anger / Control Victim Neutral                  
 Control Victim Anger / Transgression Perpetrator Disgust             
 Control Victim Anger / Control Perpetrator Disgust                   
 Control Victim Anger / Transgression Victim Disgust                  
 Control Victim Anger / Control Victim Disgust                        
 Control Victim Anger / Transgression Perpetrator Sadness             
 Control Victim Anger / Control Perpetrator Sadness                   
 Control Victim Anger / Transgression Victim Sadness                  
 Control Victim Anger / Control Victim Sadness                        
 Control Victim Anger / Transgression Perpetrator Neutral             
 Control Victim Anger / Control Perpetrator Neutral                   
 Control Victim Anger / Transgression Victim Neutral                  
 Control Victim Anger / Control Victim Neutral                        
 Transgression Perpetrator Disgust / Control Perpetrator Disgust      
 Transgression Perpetrator Disgust / Transgression Victim Disgust     
 Transgression Perpetrator Disgust / Control Victim Disgust           
 Transgression Perpetrator Disgust / Transgression Perpetrator Sadness
 Transgression Perpetrator Disgust / Control Perpetrator Sadness      
 Transgression Perpetrator Disgust / Transgression Victim Sadness     
 Transgression Perpetrator Disgust / Control Victim Sadness           
 Transgression Perpetrator Disgust / Transgression Perpetrator Neutral
 Transgression Perpetrator Disgust / Control Perpetrator Neutral      
 Transgression Perpetrator Disgust / Transgression Victim Neutral     
 Transgression Perpetrator Disgust / Control Victim Neutral           
 Control Perpetrator Disgust / Transgression Victim Disgust           
 Control Perpetrator Disgust / Control Victim Disgust                 
 Control Perpetrator Disgust / Transgression Perpetrator Sadness      
 Control Perpetrator Disgust / Control Perpetrator Sadness            
 Control Perpetrator Disgust / Transgression Victim Sadness           
 Control Perpetrator Disgust / Control Victim Sadness                 
 Control Perpetrator Disgust / Transgression Perpetrator Neutral      
 Control Perpetrator Disgust / Control Perpetrator Neutral            
 Control Perpetrator Disgust / Transgression Victim Neutral           
 Control Perpetrator Disgust / Control Victim Neutral                 
 Transgression Victim Disgust / Control Victim Disgust                
 Transgression Victim Disgust / Transgression Perpetrator Sadness     
 Transgression Victim Disgust / Control Perpetrator Sadness           
 Transgression Victim Disgust / Transgression Victim Sadness          
 Transgression Victim Disgust / Control Victim Sadness                
 Transgression Victim Disgust / Transgression Perpetrator Neutral     
 Transgression Victim Disgust / Control Perpetrator Neutral           
 Transgression Victim Disgust / Transgression Victim Neutral          
 Transgression Victim Disgust / Control Victim Neutral                
 Control Victim Disgust / Transgression Perpetrator Sadness           
 Control Victim Disgust / Control Perpetrator Sadness                 
 Control Victim Disgust / Transgression Victim Sadness                
 Control Victim Disgust / Control Victim Sadness                      
 Control Victim Disgust / Transgression Perpetrator Neutral           
 Control Victim Disgust / Control Perpetrator Neutral                 
 Control Victim Disgust / Transgression Victim Neutral                
 Control Victim Disgust / Control Victim Neutral                      
 Transgression Perpetrator Sadness / Control Perpetrator Sadness      
 Transgression Perpetrator Sadness / Transgression Victim Sadness     
 Transgression Perpetrator Sadness / Control Victim Sadness           
 Transgression Perpetrator Sadness / Transgression Perpetrator Neutral
 Transgression Perpetrator Sadness / Control Perpetrator Neutral      
 Transgression Perpetrator Sadness / Transgression Victim Neutral     
 Transgression Perpetrator Sadness / Control Victim Neutral           
 Control Perpetrator Sadness / Transgression Victim Sadness           
 Control Perpetrator Sadness / Control Victim Sadness                 
 Control Perpetrator Sadness / Transgression Perpetrator Neutral      
 Control Perpetrator Sadness / Control Perpetrator Neutral            
 Control Perpetrator Sadness / Transgression Victim Neutral           
 Control Perpetrator Sadness / Control Victim Neutral                 
 Transgression Victim Sadness / Control Victim Sadness                
 Transgression Victim Sadness / Transgression Perpetrator Neutral     
 Transgression Victim Sadness / Control Perpetrator Neutral           
 Transgression Victim Sadness / Transgression Victim Neutral          
 Transgression Victim Sadness / Control Victim Neutral                
 Control Victim Sadness / Transgression Perpetrator Neutral           
 Control Victim Sadness / Control Perpetrator Neutral                 
 Control Victim Sadness / Transgression Victim Neutral                
 Control Victim Sadness / Control Victim Neutral                      
 Transgression Perpetrator Neutral / Control Perpetrator Neutral      
 Transgression Perpetrator Neutral / Transgression Victim Neutral     
 Transgression Perpetrator Neutral / Control Victim Neutral           
 Control Perpetrator Neutral / Transgression Victim Neutral           
 Control Perpetrator Neutral / Control Victim Neutral                 
 Transgression Victim Neutral / Control Victim Neutral                
 odds.ratio     SE  df null z.ratio p.value
      0.756 0.1413 Inf    1  -1.495  1.0000
      0.674 0.1739 Inf    1  -1.529  1.0000
      0.762 0.2169 Inf    1  -0.955  1.0000
      1.313 0.1730 Inf    1   2.068  1.0000
      0.600 0.1147 Inf    1  -2.672  0.9045
      1.028 0.2604 Inf    1   0.111  1.0000
      0.741 0.2112 Inf    1  -1.053  1.0000
      1.958 0.2499 Inf    1   5.262  <.0001
      0.681 0.1284 Inf    1  -2.039  1.0000
      0.625 0.1618 Inf    1  -1.816  1.0000
      0.699 0.1999 Inf    1  -1.251  1.0000
      1.436 0.1876 Inf    1   2.771  0.6713
      1.693 0.2989 Inf    1   2.984  0.3418
      0.977 0.2479 Inf    1  -0.090  1.0000
      1.607 0.4458 Inf    1   1.709  1.0000
      0.891 0.2569 Inf    1  -0.400  1.0000
      1.007 0.2693 Inf    1   0.026  1.0000
      1.736 0.3196 Inf    1   2.996  0.3286
      0.793 0.1300 Inf    1  -1.414  1.0000
      1.360 0.3862 Inf    1   1.081  1.0000
      0.979 0.2622 Inf    1  -0.079  1.0000
      2.588 0.4692 Inf    1   5.245  <.0001
      0.900 0.1449 Inf    1  -0.656  1.0000
      0.826 0.2389 Inf    1  -0.661  1.0000
      0.924 0.2483 Inf    1  -0.293  1.0000
      1.899 0.3481 Inf    1   3.496  0.0566
      2.239 0.3289 Inf    1   5.484  <.0001
      1.292 0.3676 Inf    1   0.901  1.0000
      2.124 0.5515 Inf    1   2.901  0.4465
      1.130 0.2228 Inf    1   0.621  1.0000
      1.948 0.4984 Inf    1   2.607  1.0000
      0.890 0.2593 Inf    1  -0.400  1.0000
      1.526 0.2262 Inf    1   2.849  0.5255
      1.099 0.2171 Inf    1   0.477  1.0000
      2.904 0.7364 Inf    1   4.206  0.0031
      1.010 0.2924 Inf    1   0.034  1.0000
      0.927 0.1458 Inf    1  -0.482  1.0000
      1.037 0.2061 Inf    1   0.184  1.0000
      2.131 0.5438 Inf    1   2.964  0.3646
      2.512 0.7070 Inf    1   3.273  0.1275
      1.450 0.2161 Inf    1   2.494  1.0000
      2.384 0.4465 Inf    1   4.637  0.0004
      1.724 0.4876 Inf    1   1.925  1.0000
      0.788 0.2131 Inf    1  -0.883  1.0000
      1.350 0.2582 Inf    1   1.569  1.0000
      0.972 0.1613 Inf    1  -0.170  1.0000
      2.570 0.7216 Inf    1   3.362  0.0930
      0.893 0.2402 Inf    1  -0.419  1.0000
      0.820 0.1627 Inf    1  -0.999  1.0000
      0.918 0.1534 Inf    1  -0.513  1.0000
      1.885 0.5323 Inf    1   2.246  1.0000
      2.223 0.5780 Inf    1   3.072  0.2553
      1.283 0.2462 Inf    1   1.299  1.0000
      2.109 0.3234 Inf    1   4.867  0.0001
      0.457 0.0862 Inf    1  -4.152  0.0040
      0.783 0.1966 Inf    1  -0.973  1.0000
      0.564 0.1598 Inf    1  -2.022  1.0000
      1.491 0.1840 Inf    1   3.236  0.1454
      0.518 0.0965 Inf    1  -3.531  0.0497
      0.476 0.1222 Inf    1  -2.892  0.4599
      0.532 0.1512 Inf    1  -2.219  1.0000
      1.094 0.1385 Inf    1   0.708  1.0000
      1.290 0.2238 Inf    1   1.466  1.0000
      0.744 0.1872 Inf    1  -1.174  1.0000
      1.224 0.3371 Inf    1   0.732  1.0000
      1.714 0.4921 Inf    1   1.878  1.0000
      1.235 0.3346 Inf    1   0.777  1.0000
      3.263 0.6070 Inf    1   6.358  <.0001
      1.135 0.1884 Inf    1   0.760  1.0000
      1.041 0.3043 Inf    1   0.139  1.0000
      1.165 0.3168 Inf    1   0.563  1.0000
      2.394 0.4500 Inf    1   4.644  0.0004
      2.822 0.4309 Inf    1   6.796  <.0001
      1.629 0.4684 Inf    1   1.698  1.0000
      2.678 0.7043 Inf    1   3.746  0.0216
      0.720 0.1381 Inf    1  -1.712  1.0000
      1.904 0.4734 Inf    1   2.589  1.0000
      0.662 0.1889 Inf    1  -1.446  1.0000
      0.608 0.0911 Inf    1  -3.323  0.1069
      0.680 0.1311 Inf    1  -2.000  1.0000
      1.396 0.3497 Inf    1   1.334  1.0000
      1.647 0.4561 Inf    1   1.800  1.0000
      0.950 0.1340 Inf    1  -0.361  1.0000
      1.562 0.2824 Inf    1   2.468  1.0000
      2.643 0.7432 Inf    1   3.457  0.0655
      0.919 0.2474 Inf    1  -0.314  1.0000
      0.844 0.1678 Inf    1  -0.855  1.0000
      0.944 0.1583 Inf    1  -0.343  1.0000
      1.939 0.5482 Inf    1   2.342  1.0000
      2.286 0.5954 Inf    1   3.175  0.1797
      1.320 0.2539 Inf    1   1.442  1.0000
      2.169 0.3341 Inf    1   5.028  0.0001
      0.348 0.0638 Inf    1  -5.762  <.0001
      0.319 0.0812 Inf    1  -4.486  0.0009
      0.357 0.1007 Inf    1  -3.652  0.0312
      0.734 0.0897 Inf    1  -2.535  1.0000
      0.865 0.1473 Inf    1  -0.852  1.0000
      0.499 0.1244 Inf    1  -2.788  0.6372
      0.821 0.2243 Inf    1  -0.723  1.0000
      0.918 0.2667 Inf    1  -0.295  1.0000
      1.027 0.2774 Inf    1   0.100  1.0000
      2.110 0.3911 Inf    1   4.028  0.0068
      2.488 0.3718 Inf    1   6.098  <.0001
      1.436 0.4104 Inf    1   1.266  1.0000
      2.361 0.6164 Inf    1   3.289  0.1206
      1.119 0.2237 Inf    1   0.563  1.0000
      2.299 0.5891 Inf    1   3.248  0.1395
      2.710 0.7652 Inf    1   3.531  0.0496
      1.564 0.2358 Inf    1   2.969  0.3586
      2.572 0.4853 Inf    1   5.005  0.0001
      2.054 0.5823 Inf    1   2.539  1.0000
      2.422 0.6328 Inf    1   3.385  0.0853
      1.398 0.2705 Inf    1   1.731  1.0000
      2.298 0.3572 Inf    1   5.353  <.0001
      1.179 0.2036 Inf    1   0.954  1.0000
      0.681 0.1708 Inf    1  -1.534  1.0000
      1.119 0.3076 Inf    1   0.408  1.0000
      0.577 0.1602 Inf    1  -1.980  1.0000
      0.949 0.2391 Inf    1  -0.208  1.0000
      1.644 0.2983 Inf    1   2.739  0.7399

P value adjustment: bonferroni method for 120 tests 
Tests are performed on the log odds ratio scale 

Plot all interaction effects

plotemo2 = ggpredict(emo2, terms = c("newemo", "condition", "scenarios"), ci_level = 0.95) %>%
  plot() +
  labs(x = "Emotion", y = "Appropriate/Inappropriate Rating Likelihood", colour = "Condition", title = "", element_text(size = 14)) +
  scale_fill_Publication() +
  scale_colour_Publication() +
  theme_Publication() +
  scale_y_continuous(breaks = c(0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1))

plotemo2

2.2.3 Exploratory Analyses

Preparation

subdata = data2 %>%
  filter(newclass %in% c("Harm", "Injustice", "Humiliation"))

RT with Condition and Class (preregistered)

exprt2 = lmer(log(rt_net) ~ condition * newclass + (1|number_ID) + (1|item),
              na.action = na.omit,
              data = subdata)

Summary

tbl_regression(exprt2,
               label = list(condition ~ "Condition",
                            newclass ~ "Class of Transgression")) %>%
  modify_column_unhide(column = std.error) %>%
  modify_column_unhide(column = statistic) %>%
  modify_header(label = "**Variable**") %>%
  bold_p() %>%
  modify_fmt_fun(statistic ~ style_sigfig) %>%
  add_significance_stars(hide_ci = FALSE,
                         hide_p = FALSE,
                         pattern = "{p.value}{stars}") %>%
  add_glance_source_note(label = list(sigma ~ "\U03C3"),
                         include = c(AIC, sigma))
Variable Beta SE1 Statistic 95% CI1 p-value2
Condition




    Perpetrator
    Victim -0.06 0.045 -1.3 -0.15, 0.03 0.2
Class of Transgression




    Harm
    Humiliation 0.07 0.023 3.0 0.02, 0.12 0.009**
    Injustice 0.07 0.023 2.8 0.02, 0.12 0.013*
Condition * Class of Transgression




    Victim * Humiliation -0.02 0.022 -0.98 -0.06, 0.02 0.3
    Victim * Injustice -0.03 0.022 -1.4 -0.07, 0.01 0.2
AIC = 5,050; σ = 0.351
1 SE = Standard Error, CI = Confidence Interval
2 *p<0.05; **p<0.01; ***p<0.001

Anova & conditional and marginal coefficient of determination

Anova(exprt2, type = 3)
Analysis of Deviance Table (Type III Wald chisquare tests)

Response: log(rt_net)
                        Chisq Df Pr(>Chisq)    
(Intercept)        42941.9347  1  < 2.2e-16 ***
condition              1.6470  1   0.199367    
newclass              11.3810  2   0.003378 ** 
condition:newclass     2.1641  2   0.338897    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(r.squaredGLMM(exprt2, method = "marginal"), 4)
        R2m    R2c
[1,] 0.0115 0.3458
  • Main effect of Class \[\chi^2(2) = 11.381, p = .003\]

Variance explained by the model: \[R^2_m = 1.15\% \text{ (fixed)}\] \[R^2_c = 34.58\% \text{ (fixed + random)}\]

Pairwise comparisons & estimated marginal means

emmeans(exprt2, pairwise ~ newclass, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 newclass    response   SE  df asymp.LCL asymp.UCL
 Harm            1052 27.1 Inf      1000      1106
 Humiliation     1116 28.8 Inf      1061      1174
 Injustice       1107 28.6 Inf      1052      1164

Results are averaged over the levels of: condition 
Degrees-of-freedom method: asymptotic 
Confidence level used: 0.95 
Intervals are back-transformed from the log scale 

$contrasts
 contrast                ratio     SE  df null z.ratio p.value
 Harm / Humiliation      0.942 0.0197 Inf    1  -2.847  0.0132
 Harm / Injustice        0.950 0.0198 Inf    1  -2.435  0.0447
 Humiliation / Injustice 1.009 0.0211 Inf    1   0.410  1.0000

Results are averaged over the levels of: condition 
Degrees-of-freedom method: asymptotic 
P value adjustment: bonferroni method for 3 tests 
Tests are performed on the log scale 

Plot all interaction effects

plotexprt2 = ggpredict(exprt2, terms = c("newclass"), ci_level = 0.95) %>%
  plot() +
  labs(x = "Class of Trangression", y = "Reaction Time (ms)", title = "", element_text(size = 14)) +
  scale_fill_Publication() +
  scale_colour_Publication() +
  theme_Publication()

plotexprt2

Appropriateness with Condition and Class (preregistered)

exphit2 = glmer(score ~ condition * newclass + (1|number_ID) + (1|item),
             data = subdata,
             family = binomial,
             control = glmerControl(optimizer = "bobyqa"))

Summary

tbl_regression(exphit2,
               label = list(condition ~ "Condition",
                            newclass ~ "Class of Transgression")) %>%
  modify_column_unhide(column = std.error) %>%
  modify_column_unhide(column = statistic) %>%
  modify_header(label = "**Variable**") %>%
  bold_p() %>%
  modify_fmt_fun(statistic ~ style_sigfig) %>%
  add_significance_stars(hide_ci = FALSE,
                         hide_p = FALSE,
                         pattern = "{p.value}{stars}") %>%
  add_glance_source_note(label = list(sigma ~ "\U03C3"),
                         include = c(AIC, sigma))
Variable log(OR)1 SE1 Statistic 95% CI1 p-value2
Condition




    Perpetrator
    Victim 0.39 0.272 1.4 -0.14, 0.92 0.2
Class of Transgression




    Harm
    Humiliation -0.62 0.135 -4.6 -0.89, -0.36 <0.001***
    Injustice -0.68 0.134 -5.1 -0.94, -0.42 <0.001***
Condition * Class of Transgression




    Victim * Humiliation 0.10 0.173 0.56 -0.24, 0.44 0.6
    Victim * Injustice 0.25 0.174 1.4 -0.09, 0.59 0.2
AIC = 5,693; σ = 1.00
1 OR = Odds Ratio, SE = Standard Error, CI = Confidence Interval
2 *p<0.05; **p<0.01; ***p<0.001

Anova & conditional and marginal coefficient of determination

Anova(exphit2, type = 3)
Analysis of Deviance Table (Type III Wald chisquare tests)

Response: score
                     Chisq Df Pr(>Chisq)    
(Intercept)        98.9088  1  < 2.2e-16 ***
condition           2.0372  1     0.1535    
newclass           30.5893  2  2.278e-07 ***
condition:newclass  2.1219  2     0.3461    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(r.squaredGLMM(exphit2, method = "marginal"), 4)
               R2m    R2c
theoretical 0.0259 0.3826
delta       0.0176 0.2598
  • Main effect of Class \[\chi^2(2) = 30.594, p < .001\]

Variance explained by the model: \[R^2_m = 0.017\% \text{ (fixed)}\] \[R^2_c = 25.98\% \text{ (fixed + random)}\]

Pairwise comparisons & estimated marginal means

emmeans(exphit2, pairwise ~ newclass, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 newclass     prob     SE  df asymp.LCL asymp.UCL
 Harm        0.893 0.0140 Inf     0.862     0.917
 Humiliation 0.824 0.0207 Inf     0.780     0.861
 Injustice   0.826 0.0204 Inf     0.783     0.863

Results are averaged over the levels of: condition 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
 contrast                odds.ratio    SE  df null z.ratio p.value
 Harm / Humiliation           1.778 0.202 Inf    1   5.066  <.0001
 Harm / Injustice             1.745 0.199 Inf    1   4.887  <.0001
 Humiliation / Injustice      0.981 0.107 Inf    1  -0.174  1.0000

Results are averaged over the levels of: condition 
P value adjustment: bonferroni method for 3 tests 
Tests are performed on the log odds ratio scale 

Plot all interaction effects

plotexphit2 = ggpredict(exphit2, terms = c("newclass"), ci_level = 0.95) %>%
  plot() +
  labs(x = "Class of Trangression", y = "Appropriate/Inappropriate Rating Likelihood", title = "", element_text(size = 14)) +
  scale_fill_Publication() +
  scale_colour_Publication() +
  theme_Publication() +
  scale_y_continuous(breaks = c(0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1))

plotexphit2

RT with Condition, Emotion and Class + covariates (preregistered)

Full mixed-effect model

full2cov = lmer(log(rt_net) ~ condition * newemo * scenarios + age + newgender + political_orientation + (1|number_ID) + (1|item),
           na.action = na.omit,
           data = data2)

Summary

tbl_regression(full2cov,
               label = list(condition ~ "Condition",
                            scenarios ~ "Scenarios",
                            newemo ~ "Emotion",
                            age ~ "Age",
                            newgender ~ "Sex",
                            political_orientation ~ "Political Orientation (1-Liberal to 7-Conservative)")) %>%
  modify_column_unhide(column = std.error) %>%
  modify_column_unhide(column = statistic) %>%
  modify_header(label = "**Variable**") %>%
  bold_p() %>%
  modify_fmt_fun(statistic ~ style_sigfig) %>%
  add_significance_stars(hide_ci = FALSE,
                         hide_p = FALSE,
                         pattern = "{p.value}{stars}") %>%
  add_glance_source_note(label = list(sigma ~ "\U03C3"),
                         include = c(AIC, sigma))
Variable Beta SE1 Statistic 95% CI1 p-value2
Condition




    Perpetrator
    Victim -0.05 0.044 -1.2 -0.14, 0.03 0.2
Emotion




    Anger
    Disgust 0.04 0.017 2.4 0.01, 0.08 0.016*
    Sadness 0.02 0.017 0.95 -0.02, 0.05 0.3
    Neutral 0.12 0.018 7.1 0.09, 0.16 <0.001***
Scenarios




    Transgression
    Control -0.03 0.024 -1.2 -0.08, 0.02 0.3
Age 0.00 0.002 2.9 0.00, 0.01 0.005**
Sex




    Female
    Male -0.02 0.042 -0.55 -0.11, 0.06 0.6
Political Orientation (1-Liberal to 7-Conservative)




    1
    2 -0.06 0.060 -0.92 -0.18, 0.06 0.4
    3 0.03 0.065 0.50 -0.10, 0.16 0.6
    4 -0.09 0.067 -1.4 -0.22, 0.04 0.2
    5 -0.14 0.071 -2.0 -0.29, 0.00 0.046*
    6 -0.08 0.084 -1.0 -0.25, 0.08 0.3
    7 -0.17 0.089 -1.9 -0.35, 0.00 0.056
Condition * Emotion




    Victim * Disgust 0.00 0.025 0.00 -0.05, 0.05 >0.9
    Victim * Sadness -0.06 0.025 -2.5 -0.11, -0.01 0.013*
    Victim * Neutral -0.03 0.025 -1.0 -0.08, 0.02 0.3
Condition * Scenarios




    Victim * Control 0.01 0.026 0.56 -0.04, 0.07 0.6
Emotion * Scenarios




    Disgust * Control -0.06 0.026 -2.2 -0.11, 0.00 0.032*
    Sadness * Control -0.02 0.026 -0.67 -0.07, 0.03 0.5
    Neutral * Control -0.08 0.026 -3.3 -0.14, -0.03 0.001**
Condition * Emotion * Scenarios




    Victim * Disgust * Control 0.02 0.037 0.55 -0.05, 0.09 0.6
    Victim * Sadness * Control 0.07 0.037 2.0 0.00, 0.15 0.043*
    Victim * Neutral * Control 0.03 0.037 0.84 -0.04, 0.10 0.4
AIC = 8,963; σ = 0.348
1 SE = Standard Error, CI = Confidence Interval
2 *p<0.05; **p<0.01; ***p<0.001

Anova & conditional and marginal coefficient of determination

Anova(full2cov, type = 3, ddf = "Satterthwaite")
Analysis of Deviance Table (Type III Wald chisquare tests)

Response: log(rt_net)
                               Chisq Df Pr(>Chisq)    
(Intercept)                7969.6340  1  < 2.2e-16 ***
condition                     1.4489  1   0.228705    
newemo                       58.0170  3  1.559e-12 ***
scenarios                     1.3304  1   0.248739    
age                           8.2196  1   0.004144 ** 
newgender                     0.3004  1   0.583646    
political_orientation         9.3631  6   0.154166    
condition:newemo              8.2530  3   0.041063 *  
condition:scenarios           0.3117  1   0.576660    
newemo:scenarios             13.0214  3   0.004590 ** 
condition:newemo:scenarios    4.3540  3   0.225688    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(r.squaredGLMM(full2cov, method = "marginal"), 4)
        R2m    R2c
[1,] 0.0501 0.3503
  • Main effect of Emotion \[\chi^2(3) = 58.017, p < .001\]
  • Main effect of Age \[\chi^2(1) = 8.22, p = .004\]
  • Interaction of Emotion and Scenario \[\chi^2(3) = 13.021, p = .0045 \]

Variance explained by the model: \[R^2_m = 5.01\% \text{ (fixed)}\] \[R^2_c = 35.03\% \text{ (fixed + random)}\] Pairwise comparisons (estimated marginal means and pairwise comparisons)

emmeans(full2cov, pairwise ~ newemo, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 newemo  response   SE  df asymp.LCL asymp.UCL
 Anger       1018 25.2 Inf       970      1069
 Disgust     1038 25.7 Inf       989      1090
 Sadness     1014 25.1 Inf       966      1064
 Neutral     1099 27.2 Inf      1047      1154

Results are averaged over the levels of: condition, scenarios, newgender, political_orientation 
Degrees-of-freedom method: asymptotic 
Confidence level used: 0.95 
Intervals are back-transformed from the log scale 

$contrasts
 contrast          ratio      SE  df null z.ratio p.value
 Anger / Disgust   0.981 0.00908 Inf    1  -2.092  0.2187
 Anger / Sadness   1.004 0.00928 Inf    1   0.485  1.0000
 Anger / Neutral   0.926 0.00863 Inf    1  -8.212  <.0001
 Disgust / Sadness 1.024 0.00949 Inf    1   2.573  0.0606
 Disgust / Neutral 0.944 0.00883 Inf    1  -6.114  <.0001
 Sadness / Neutral 0.922 0.00860 Inf    1  -8.681  <.0001

Results are averaged over the levels of: condition, scenarios, newgender, political_orientation 
Degrees-of-freedom method: asymptotic 
P value adjustment: bonferroni method for 6 tests 
Tests are performed on the log scale 
emmeans(full2cov, pairwise ~ scenarios, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 scenarios     response   SE  df asymp.LCL asymp.UCL
 Transgression     1065 26.9 Inf      1013      1119
 Control           1019 26.2 Inf       969      1072

Results are averaged over the levels of: condition, newemo, newgender, political_orientation 
Degrees-of-freedom method: asymptotic 
Confidence level used: 0.95 
Intervals are back-transformed from the log scale 

$contrasts
 contrast                ratio     SE  df null z.ratio p.value
 Transgression / Control  1.04 0.0176 Inf    1   2.597  0.0094

Results are averaged over the levels of: condition, newemo, newgender, political_orientation 
Degrees-of-freedom method: asymptotic 
Tests are performed on the log scale 

Plot all interaction effects

plotfull2cov = ggpredict(full2cov, terms = c("age", "scenarios", "newemo"), ci_level = 0.95) %>%
  plot() +
  labs(x = "Age", y = "Reaction Time (ms)", colour = "Scenario", title = "", element_text(size = 14)) +
  scale_fill_Publication() +
  scale_colour_Publication() +
  theme_Publication() +
  scale_x_continuous(breaks = c(20, 30, 40, 50, 60, 70)) +
  scale_y_continuous(breaks = c(800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700))
plotfull2cov

Appropriateness with Condition, Emotion and Class + covariates (preregistered)

Full mixed-effect model

emo2cov = glmer(score ~  condition * newemo * scenarios + age + newgender + political_orientation + (1|number_ID) + (1|item),
          data = data2,
          family = binomial,
          na.action = na.omit,
          control = glmerControl(optimizer = "bobyqa"))

Summary

tbl_regression(full2cov,
               label = list(condition ~ "Condition",
                            scenarios ~ "Scenarios",
                            newemo ~ "Emotion",
                            age ~ "Age",
                            newgender ~ "Sex",
                            political_orientation ~ "Political Orientation (1-Liberal to 7-Conservative)")) %>%
  modify_column_unhide(column = std.error) %>%
  modify_column_unhide(column = statistic) %>%
  modify_header(label = "**Variable**") %>%
  bold_p() %>%
  modify_fmt_fun(statistic ~ style_sigfig) %>%
  add_significance_stars(hide_ci = FALSE,
                         hide_p = FALSE,
                         pattern = "{p.value}{stars}") %>%
  add_glance_source_note(label = list(sigma ~ "\U03C3"),
                         include = c(AIC, sigma))
Variable Beta SE1 Statistic 95% CI1 p-value2
Condition




    Perpetrator
    Victim -0.05 0.044 -1.2 -0.14, 0.03 0.2
Emotion




    Anger
    Disgust 0.04 0.017 2.4 0.01, 0.08 0.016*
    Sadness 0.02 0.017 0.95 -0.02, 0.05 0.3
    Neutral 0.12 0.018 7.1 0.09, 0.16 <0.001***
Scenarios




    Transgression
    Control -0.03 0.024 -1.2 -0.08, 0.02 0.3
Age 0.00 0.002 2.9 0.00, 0.01 0.005**
Sex




    Female
    Male -0.02 0.042 -0.55 -0.11, 0.06 0.6
Political Orientation (1-Liberal to 7-Conservative)




    1
    2 -0.06 0.060 -0.92 -0.18, 0.06 0.4
    3 0.03 0.065 0.50 -0.10, 0.16 0.6
    4 -0.09 0.067 -1.4 -0.22, 0.04 0.2
    5 -0.14 0.071 -2.0 -0.29, 0.00 0.046*
    6 -0.08 0.084 -1.0 -0.25, 0.08 0.3
    7 -0.17 0.089 -1.9 -0.35, 0.00 0.056
Condition * Emotion




    Victim * Disgust 0.00 0.025 0.00 -0.05, 0.05 >0.9
    Victim * Sadness -0.06 0.025 -2.5 -0.11, -0.01 0.013*
    Victim * Neutral -0.03 0.025 -1.0 -0.08, 0.02 0.3
Condition * Scenarios




    Victim * Control 0.01 0.026 0.56 -0.04, 0.07 0.6
Emotion * Scenarios




    Disgust * Control -0.06 0.026 -2.2 -0.11, 0.00 0.032*
    Sadness * Control -0.02 0.026 -0.67 -0.07, 0.03 0.5
    Neutral * Control -0.08 0.026 -3.3 -0.14, -0.03 0.001**
Condition * Emotion * Scenarios




    Victim * Disgust * Control 0.02 0.037 0.55 -0.05, 0.09 0.6
    Victim * Sadness * Control 0.07 0.037 2.0 0.00, 0.15 0.043*
    Victim * Neutral * Control 0.03 0.037 0.84 -0.04, 0.10 0.4
AIC = 8,963; σ = 0.348
1 SE = Standard Error, CI = Confidence Interval
2 *p<0.05; **p<0.01; ***p<0.001

Anova & conditional and marginal coefficient of determination

Anova(emo2cov, type = 3, ddf = "Satterthwaite")
Analysis of Deviance Table (Type III Wald chisquare tests)

Response: score
                             Chisq Df Pr(>Chisq)    
(Intercept)                27.0127  1  2.021e-07 ***
condition                   2.7601  1    0.09664 .  
newemo                     28.6417  3  2.663e-06 ***
scenarios                   2.2377  1    0.13468    
age                         2.7648  1    0.09636 .  
newgender                   0.0685  1    0.79352    
political_orientation       3.3131  6    0.76865    
condition:newemo           25.5542  3  1.182e-05 ***
condition:scenarios         3.3972  1    0.06531 .  
newemo:scenarios           46.5362  3  4.362e-10 ***
condition:newemo:scenarios  9.9882  3    0.01867 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(r.squaredGLMM(emo2cov, method = "marginal"), 4)
               R2m    R2c
theoretical 0.0444 0.3467
delta       0.0289 0.2260
  • Main effect of Emotion \[\chi^2(3) = 28.558, p < .001\]
  • Interaction between Emotion and Condition \[\chi^2(3) = 25.494, p < .001\]
  • Interaction between Emotion and Scenarios \[\chi^2(3) = 46.448, p < .001\]
  • Interaction between Emotion, Condition and Scenarios \[\chi^2(3) = 9.942, p = .019\]

Variance explained by the model: \[R^2_m = 2.88\% \text{ (fixed)}\] \[R^2_c = 22.59\% \text{ (fixed + random)}\] Pairwise comparisons (estimated marginal means and pairwise comparisons)

emmeans(emo2cov, pairwise ~ newemo, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 newemo   prob     SE  df asymp.LCL asymp.UCL
 Anger   0.872 0.0159 Inf     0.837     0.900
 Disgust 0.859 0.0171 Inf     0.822     0.890
 Sadness 0.860 0.0171 Inf     0.823     0.890
 Neutral 0.794 0.0228 Inf     0.745     0.835

Results are averaged over the levels of: condition, scenarios, newgender, political_orientation 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        1.115 0.0853 Inf    1   1.422  0.9301
 Anger / Sadness        1.106 0.0852 Inf    1   1.314  1.0000
 Anger / Neutral        1.771 0.1288 Inf    1   7.857  <.0001
 Disgust / Sadness      0.992 0.0758 Inf    1  -0.100  1.0000
 Disgust / Neutral      1.588 0.1144 Inf    1   6.423  <.0001
 Sadness / Neutral      1.600 0.1162 Inf    1   6.480  <.0001

Results are averaged over the levels of: condition, scenarios, newgender, political_orientation 
P value adjustment: bonferroni method for 6 tests 
Tests are performed on the log odds ratio scale 
emmeans(emo2cov, pairwise ~ newemo|condition, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
condition = Perpetrator:
 newemo   prob     SE  df asymp.LCL asymp.UCL
 Anger   0.859 0.0225 Inf     0.809     0.897
 Disgust 0.856 0.0229 Inf     0.805     0.896
 Sadness 0.821 0.0271 Inf     0.761     0.868
 Neutral 0.772 0.0319 Inf     0.704     0.829

condition = Victim:
 newemo   prob     SE  df asymp.LCL asymp.UCL
 Anger   0.884 0.0190 Inf     0.841     0.916
 Disgust 0.862 0.0218 Inf     0.814     0.900
 Sadness 0.892 0.0179 Inf     0.852     0.922
 Neutral 0.813 0.0274 Inf     0.754     0.861

Results are averaged over the levels of: scenarios, newgender, political_orientation 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
condition = Perpetrator:
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        1.021 0.1073 Inf    1   0.194  1.0000
 Anger / Sadness        1.327 0.1363 Inf    1   2.757  0.0350
 Anger / Neutral        1.793 0.1765 Inf    1   5.931  <.0001
 Disgust / Sadness      1.301 0.1345 Inf    1   2.540  0.0665
 Disgust / Neutral      1.757 0.1743 Inf    1   5.679  <.0001
 Sadness / Neutral      1.351 0.1302 Inf    1   3.118  0.0109

condition = Victim:
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        1.218 0.1355 Inf    1   1.773  0.4574
 Anger / Sadness        0.922 0.1059 Inf    1  -0.704  1.0000
 Anger / Neutral        1.749 0.1873 Inf    1   5.222  <.0001
 Disgust / Sadness      0.757 0.0852 Inf    1  -2.471  0.0809
 Disgust / Neutral      1.436 0.1500 Inf    1   3.466  0.0032
 Sadness / Neutral      1.896 0.2057 Inf    1   5.900  <.0001

Results are averaged over the levels of: scenarios, newgender, political_orientation 
P value adjustment: bonferroni method for 6 tests 
Tests are performed on the log odds ratio scale 
emmeans(emo2cov, pairwise ~ newemo|scenarios, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
scenarios = Transgression:
 newemo   prob     SE  df asymp.LCL asymp.UCL
 Anger   0.867 0.0183 Inf     0.827     0.899
 Disgust 0.822 0.0228 Inf     0.773     0.863
 Sadness 0.829 0.0223 Inf     0.781     0.869
 Neutral 0.819 0.0231 Inf     0.770     0.860

scenarios = Control:
 newemo   prob     SE  df asymp.LCL asymp.UCL
 Anger   0.876 0.0180 Inf     0.836     0.907
 Disgust 0.890 0.0165 Inf     0.853     0.918
 Sadness 0.886 0.0169 Inf     0.849     0.915
 Neutral 0.765 0.0288 Inf     0.704     0.817

Results are averaged over the levels of: condition, newgender, political_orientation 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
scenarios = Transgression:
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        1.416 0.1404 Inf    1   3.504  0.0028
 Anger / Sadness        1.347 0.1364 Inf    1   2.942  0.0196
 Anger / Neutral        1.443 0.1430 Inf    1   3.701  0.0013
 Disgust / Sadness      0.952 0.0924 Inf    1  -0.510  1.0000
 Disgust / Neutral      1.020 0.0966 Inf    1   0.204  1.0000
 Sadness / Neutral      1.071 0.1040 Inf    1   0.710  1.0000

scenarios = Control:
 contrast          odds.ratio     SE  df null z.ratio p.value
 Anger / Disgust        0.878 0.1024 Inf    1  -1.114  1.0000
 Anger / Sadness        0.909 0.1055 Inf    1  -0.824  1.0000
 Anger / Neutral        2.173 0.2308 Inf    1   7.306  <.0001
 Disgust / Sadness      1.035 0.1221 Inf    1   0.290  1.0000
 Disgust / Neutral      2.474 0.2684 Inf    1   8.352  <.0001
 Sadness / Neutral      2.391 0.2579 Inf    1   8.083  <.0001

Results are averaged over the levels of: condition, newgender, political_orientation 
P value adjustment: bonferroni method for 6 tests 
Tests are performed on the log odds ratio scale 
emmeans(emo2cov, pairwise ~ condition*newemo*scenarios, lmer.df = "asymp", type = "response", adjust = "bonferroni")
$emmeans
 condition   newemo  scenarios      prob     SE  df asymp.LCL asymp.UCL
 Perpetrator Anger   Transgression 0.841 0.0270 Inf     0.781     0.887
 Victim      Anger   Transgression 0.890 0.0202 Inf     0.844     0.924
 Perpetrator Disgust Transgression 0.801 0.0317 Inf     0.732     0.856
 Victim      Disgust Transgression 0.841 0.0268 Inf     0.782     0.887
 Perpetrator Sadness Transgression 0.730 0.0387 Inf     0.648     0.799
 Victim      Sadness Transgression 0.897 0.0192 Inf     0.853     0.929
 Perpetrator Neutral Transgression 0.786 0.0333 Inf     0.714     0.845
 Victim      Neutral Transgression 0.848 0.0259 Inf     0.790     0.892
 Perpetrator Anger   Control       0.875 0.0233 Inf     0.822     0.914
 Victim      Anger   Control       0.878 0.0229 Inf     0.825     0.916
 Perpetrator Disgust Control       0.898 0.0199 Inf     0.852     0.931
 Victim      Disgust Control       0.881 0.0225 Inf     0.829     0.918
 Perpetrator Sadness Control       0.886 0.0217 Inf     0.836     0.922
 Victim      Sadness Control       0.886 0.0216 Inf     0.837     0.922
 Perpetrator Neutral Control       0.757 0.0374 Inf     0.677     0.823
 Victim      Neutral Control       0.773 0.0357 Inf     0.695     0.835

Results are averaged over the levels of: newgender, political_orientation 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
 contrast                                                             
 Perpetrator Anger Transgression / Victim Anger Transgression         
 Perpetrator Anger Transgression / Perpetrator Disgust Transgression  
 Perpetrator Anger Transgression / Victim Disgust Transgression       
 Perpetrator Anger Transgression / Perpetrator Sadness Transgression  
 Perpetrator Anger Transgression / Victim Sadness Transgression       
 Perpetrator Anger Transgression / Perpetrator Neutral Transgression  
 Perpetrator Anger Transgression / Victim Neutral Transgression       
 Perpetrator Anger Transgression / Perpetrator Anger Control          
 Perpetrator Anger Transgression / Victim Anger Control               
 Perpetrator Anger Transgression / Perpetrator Disgust Control        
 Perpetrator Anger Transgression / Victim Disgust Control             
 Perpetrator Anger Transgression / Perpetrator Sadness Control        
 Perpetrator Anger Transgression / Victim Sadness Control             
 Perpetrator Anger Transgression / Perpetrator Neutral Control        
 Perpetrator Anger Transgression / Victim Neutral Control             
 Victim Anger Transgression / Perpetrator Disgust Transgression       
 Victim Anger Transgression / Victim Disgust Transgression            
 Victim Anger Transgression / Perpetrator Sadness Transgression       
 Victim Anger Transgression / Victim Sadness Transgression            
 Victim Anger Transgression / Perpetrator Neutral Transgression       
 Victim Anger Transgression / Victim Neutral Transgression            
 Victim Anger Transgression / Perpetrator Anger Control               
 Victim Anger Transgression / Victim Anger Control                    
 Victim Anger Transgression / Perpetrator Disgust Control             
 Victim Anger Transgression / Victim Disgust Control                  
 Victim Anger Transgression / Perpetrator Sadness Control             
 Victim Anger Transgression / Victim Sadness Control                  
 Victim Anger Transgression / Perpetrator Neutral Control             
 Victim Anger Transgression / Victim Neutral Control                  
 Perpetrator Disgust Transgression / Victim Disgust Transgression     
 Perpetrator Disgust Transgression / Perpetrator Sadness Transgression
 Perpetrator Disgust Transgression / Victim Sadness Transgression     
 Perpetrator Disgust Transgression / Perpetrator Neutral Transgression
 Perpetrator Disgust Transgression / Victim Neutral Transgression     
 Perpetrator Disgust Transgression / Perpetrator Anger Control        
 Perpetrator Disgust Transgression / Victim Anger Control             
 Perpetrator Disgust Transgression / Perpetrator Disgust Control      
 Perpetrator Disgust Transgression / Victim Disgust Control           
 Perpetrator Disgust Transgression / Perpetrator Sadness Control      
 Perpetrator Disgust Transgression / Victim Sadness Control           
 Perpetrator Disgust Transgression / Perpetrator Neutral Control      
 Perpetrator Disgust Transgression / Victim Neutral Control           
 Victim Disgust Transgression / Perpetrator Sadness Transgression     
 Victim Disgust Transgression / Victim Sadness Transgression          
 Victim Disgust Transgression / Perpetrator Neutral Transgression     
 Victim Disgust Transgression / Victim Neutral Transgression          
 Victim Disgust Transgression / Perpetrator Anger Control             
 Victim Disgust Transgression / Victim Anger Control                  
 Victim Disgust Transgression / Perpetrator Disgust Control           
 Victim Disgust Transgression / Victim Disgust Control                
 Victim Disgust Transgression / Perpetrator Sadness Control           
 Victim Disgust Transgression / Victim Sadness Control                
 Victim Disgust Transgression / Perpetrator Neutral Control           
 Victim Disgust Transgression / Victim Neutral Control                
 Perpetrator Sadness Transgression / Victim Sadness Transgression     
 Perpetrator Sadness Transgression / Perpetrator Neutral Transgression
 Perpetrator Sadness Transgression / Victim Neutral Transgression     
 Perpetrator Sadness Transgression / Perpetrator Anger Control        
 Perpetrator Sadness Transgression / Victim Anger Control             
 Perpetrator Sadness Transgression / Perpetrator Disgust Control      
 Perpetrator Sadness Transgression / Victim Disgust Control           
 Perpetrator Sadness Transgression / Perpetrator Sadness Control      
 Perpetrator Sadness Transgression / Victim Sadness Control           
 Perpetrator Sadness Transgression / Perpetrator Neutral Control      
 Perpetrator Sadness Transgression / Victim Neutral Control           
 Victim Sadness Transgression / Perpetrator Neutral Transgression     
 Victim Sadness Transgression / Victim Neutral Transgression          
 Victim Sadness Transgression / Perpetrator Anger Control             
 Victim Sadness Transgression / Victim Anger Control                  
 Victim Sadness Transgression / Perpetrator Disgust Control           
 Victim Sadness Transgression / Victim Disgust Control                
 Victim Sadness Transgression / Perpetrator Sadness Control           
 Victim Sadness Transgression / Victim Sadness Control                
 Victim Sadness Transgression / Perpetrator Neutral Control           
 Victim Sadness Transgression / Victim Neutral Control                
 Perpetrator Neutral Transgression / Victim Neutral Transgression     
 Perpetrator Neutral Transgression / Perpetrator Anger Control        
 Perpetrator Neutral Transgression / Victim Anger Control             
 Perpetrator Neutral Transgression / Perpetrator Disgust Control      
 Perpetrator Neutral Transgression / Victim Disgust Control           
 Perpetrator Neutral Transgression / Perpetrator Sadness Control      
 Perpetrator Neutral Transgression / Victim Sadness Control           
 Perpetrator Neutral Transgression / Perpetrator Neutral Control      
 Perpetrator Neutral Transgression / Victim Neutral Control           
 Victim Neutral Transgression / Perpetrator Anger Control             
 Victim Neutral Transgression / Victim Anger Control                  
 Victim Neutral Transgression / Perpetrator Disgust Control           
 Victim Neutral Transgression / Victim Disgust Control                
 Victim Neutral Transgression / Perpetrator Sadness Control           
 Victim Neutral Transgression / Victim Sadness Control                
 Victim Neutral Transgression / Perpetrator Neutral Control           
 Victim Neutral Transgression / Victim Neutral Control                
 Perpetrator Anger Control / Victim Anger Control                     
 Perpetrator Anger Control / Perpetrator Disgust Control              
 Perpetrator Anger Control / Victim Disgust Control                   
 Perpetrator Anger Control / Perpetrator Sadness Control              
 Perpetrator Anger Control / Victim Sadness Control                   
 Perpetrator Anger Control / Perpetrator Neutral Control              
 Perpetrator Anger Control / Victim Neutral Control                   
 Victim Anger Control / Perpetrator Disgust Control                   
 Victim Anger Control / Victim Disgust Control                        
 Victim Anger Control / Perpetrator Sadness Control                   
 Victim Anger Control / Victim Sadness Control                        
 Victim Anger Control / Perpetrator Neutral Control                   
 Victim Anger Control / Victim Neutral Control                        
 Perpetrator Disgust Control / Victim Disgust Control                 
 Perpetrator Disgust Control / Perpetrator Sadness Control            
 Perpetrator Disgust Control / Victim Sadness Control                 
 Perpetrator Disgust Control / Perpetrator Neutral Control            
 Perpetrator Disgust Control / Victim Neutral Control                 
 Victim Disgust Control / Perpetrator Sadness Control                 
 Victim Disgust Control / Victim Sadness Control                      
 Victim Disgust Control / Perpetrator Neutral Control                 
 Victim Disgust Control / Victim Neutral Control                      
 Perpetrator Sadness Control / Victim Sadness Control                 
 Perpetrator Sadness Control / Perpetrator Neutral Control            
 Perpetrator Sadness Control / Victim Neutral Control                 
 Victim Sadness Control / Perpetrator Neutral Control                 
 Victim Sadness Control / Victim Neutral Control                      
 Perpetrator Neutral Control / Victim Neutral Control                 
 odds.ratio     SE  df null z.ratio p.value
      0.653 0.1676 Inf    1  -1.661  1.0000
      1.313 0.1729 Inf    1   2.066  1.0000
      0.996 0.2511 Inf    1  -0.016  1.0000
      1.957 0.2499 Inf    1   5.260  <.0001
      0.605 0.1561 Inf    1  -1.948  1.0000
      1.436 0.1876 Inf    1   2.769  0.6748
      0.947 0.2391 Inf    1  -0.217  1.0000
      0.756 0.1412 Inf    1  -1.496  1.0000
      0.738 0.2094 Inf    1  -1.071  1.0000
      0.600 0.1147 Inf    1  -2.672  0.9056
      0.717 0.2038 Inf    1  -1.170  1.0000
      0.681 0.1284 Inf    1  -2.039  1.0000
      0.677 0.1929 Inf    1  -1.369  1.0000
      1.693 0.2988 Inf    1   2.983  0.3430
      1.556 0.4303 Inf    1   1.600  1.0000
      2.012 0.5125 Inf    1   2.743  0.7305
      1.526 0.2263 Inf    1   2.851  0.5226
      2.999 0.7573 Inf    1   4.350  0.0016
      0.927 0.1458 Inf    1  -0.481  1.0000
      2.200 0.5593 Inf    1   3.102  0.2307
      1.451 0.2162 Inf    1   2.495  1.0000
      1.159 0.3330 Inf    1   0.513  1.0000
      1.131 0.2228 Inf    1   0.622  1.0000
      0.919 0.2669 Inf    1  -0.289  1.0000
      1.099 0.2172 Inf    1   0.477  1.0000
      1.043 0.3010 Inf    1   0.146  1.0000
      1.037 0.2061 Inf    1   0.185  1.0000
      2.594 0.7275 Inf    1   3.399  0.0813
      2.385 0.4467 Inf    1   4.639  0.0004
      0.759 0.1897 Inf    1  -1.104  1.0000
      1.491 0.1840 Inf    1   3.236  0.1456
      0.461 0.1179 Inf    1  -3.028  0.2957
      1.094 0.1385 Inf    1   0.708  1.0000
      0.721 0.1806 Inf    1  -1.305  1.0000
      0.576 0.1060 Inf    1  -2.996  0.3283
      0.562 0.1584 Inf    1  -2.044  1.0000
      0.457 0.0862 Inf    1  -4.151  0.0040
      0.546 0.1542 Inf    1  -2.142  1.0000
      0.519 0.0965 Inf    1  -3.530  0.0498
      0.516 0.1460 Inf    1  -2.339  1.0000
      1.290 0.2237 Inf    1   1.466  1.0000
      1.185 0.3254 Inf    1   0.620  1.0000
      1.965 0.4866 Inf    1   2.728  0.7651
      0.607 0.0911 Inf    1  -3.323  0.1068
      1.441 0.3595 Inf    1   1.466  1.0000
      0.950 0.1341 Inf    1  -0.361  1.0000
      0.759 0.2149 Inf    1  -0.973  1.0000
      0.741 0.1417 Inf    1  -1.569  1.0000
      0.602 0.1723 Inf    1  -1.772  1.0000
      0.720 0.1381 Inf    1  -1.713  1.0000
      0.683 0.1943 Inf    1  -1.339  1.0000
      0.680 0.1311 Inf    1  -2.001  1.0000
      1.700 0.4692 Inf    1   1.921  1.0000
      1.562 0.2825 Inf    1   2.468  1.0000
      0.309 0.0784 Inf    1  -4.630  0.0004
      0.734 0.0897 Inf    1  -2.535  1.0000
      0.484 0.1200 Inf    1  -2.927  0.4103
      0.386 0.0700 Inf    1  -5.245  <.0001
      0.377 0.1055 Inf    1  -3.486  0.0588
      0.307 0.0570 Inf    1  -6.357  <.0001
      0.366 0.1027 Inf    1  -3.583  0.0408
      0.348 0.0638 Inf    1  -5.761  <.0001
      0.346 0.0972 Inf    1  -3.778  0.0190
      0.865 0.1473 Inf    1  -0.852  1.0000
      0.795 0.2166 Inf    1  -0.842  1.0000
      2.373 0.6057 Inf    1   3.386  0.0852
      1.565 0.2359 Inf    1   2.969  0.3586
      1.250 0.3603 Inf    1   0.774  1.0000
      1.219 0.2419 Inf    1   1.000  1.0000
      0.992 0.2888 Inf    1  -0.029  1.0000
      1.185 0.2358 Inf    1   0.855  1.0000
      1.125 0.3257 Inf    1   0.407  1.0000
      1.119 0.2237 Inf    1   0.562  1.0000
      2.798 0.7874 Inf    1   3.656  0.0307
      2.572 0.4854 Inf    1   5.006  0.0001
      0.659 0.1647 Inf    1  -1.667  1.0000
      0.527 0.0966 Inf    1  -3.497  0.0565
      0.514 0.1446 Inf    1  -2.366  1.0000
      0.418 0.0785 Inf    1  -4.643  0.0004
      0.500 0.1407 Inf    1  -2.464  1.0000
      0.474 0.0879 Inf    1  -4.027  0.0068
      0.472 0.1332 Inf    1  -2.661  0.9356
      1.179 0.2036 Inf    1   0.954  1.0000
      1.084 0.2969 Inf    1   0.294  1.0000
      0.799 0.2265 Inf    1  -0.792  1.0000
      0.779 0.1495 Inf    1  -1.299  1.0000
      0.634 0.1816 Inf    1  -1.591  1.0000
      0.758 0.1458 Inf    1  -1.443  1.0000
      0.719 0.2048 Inf    1  -1.158  1.0000
      0.715 0.1384 Inf    1  -1.732  1.0000
      1.788 0.4945 Inf    1   2.102  1.0000
      1.644 0.2983 Inf    1   2.739  0.7387
      0.976 0.2599 Inf    1  -0.093  1.0000
      0.793 0.1300 Inf    1  -1.412  1.0000
      0.948 0.2530 Inf    1  -0.199  1.0000
      0.900 0.1449 Inf    1  -0.654  1.0000
      0.895 0.2396 Inf    1  -0.414  1.0000
      2.238 0.3289 Inf    1   5.484  <.0001
      2.058 0.5322 Inf    1   2.790  0.6318
      0.813 0.2193 Inf    1  -0.767  1.0000
      0.972 0.1612 Inf    1  -0.171  1.0000
      0.923 0.2471 Inf    1  -0.301  1.0000
      0.918 0.1534 Inf    1  -0.514  1.0000
      2.295 0.5944 Inf    1   3.206  0.1614
      2.109 0.3235 Inf    1   4.867  0.0001
      1.195 0.3227 Inf    1   0.661  1.0000
      1.134 0.1883 Inf    1   0.760  1.0000
      1.128 0.3055 Inf    1   0.446  1.0000
      2.821 0.4307 Inf    1   6.795  <.0001
      2.594 0.6792 Inf    1   3.639  0.0328
      0.949 0.2545 Inf    1  -0.195  1.0000
      0.944 0.1584 Inf    1  -0.344  1.0000
      2.360 0.6124 Inf    1   3.310  0.1118
      2.170 0.3343 Inf    1   5.029  0.0001
      0.995 0.2676 Inf    1  -0.020  1.0000
      2.487 0.3716 Inf    1   6.097  <.0001
      2.286 0.5945 Inf    1   3.180  0.1767
      2.500 0.6508 Inf    1   3.521  0.0516
      2.299 0.3574 Inf    1   5.354  <.0001
      0.919 0.2307 Inf    1  -0.335  1.0000

Results are averaged over the levels of: newgender, political_orientation 
P value adjustment: bonferroni method for 120 tests 
Tests are performed on the log odds ratio scale 

Plot all interaction effects

plotemo2cov = ggpredict(emo2cov, terms = c("newemo", "condition", "scenarios"), ci_level = 0.95) %>%
  plot() +
  labs(x = "Emotion", y = "Appropriate/Inappropriate Rating Likelihood", colour = "Condition", title = "", element_text(size = 14)) +
  scale_fill_Publication() +
  scale_colour_Publication() +
  theme_Publication() +
  scale_y_continuous(breaks = c(0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1))

plotemo2cov

References

Arnold, J. B. (2024). Ggthemes: Extra themes, scales and geoms for ggplot2. https://jrnold.github.io/ggthemes/
Auguie, B. (2017). gridExtra: Miscellaneous functions for "grid" graphics. https://CRAN.R-project.org/package=gridExtra
Bache, S. M., & Wickham, H. (2022). Magrittr: A forward-pipe operator for r. https://magrittr.tidyverse.org
Barrett, T., Dowle, M., Srinivasan, A., Gorecki, J., Chirico, M., & Hocking, T. (2024). Data.table: Extension of ‘data.frame‘. https://r-datatable.com
Bartoń, K. (2023). MuMIn: Multi-model inference. https://CRAN.R-project.org/package=MuMIn
Bates, D., Mächler, M., Bolker, B., & Walker, S. (2015). Fitting linear mixed-effects models using lme4. Journal of Statistical Software, 67(1), 1–48. https://doi.org/10.18637/jss.v067.i01
Bates, D., Maechler, M., Bolker, B., & Walker, S. (2024). lme4: Linear mixed-effects models using eigen and S4. https://github.com/lme4/lme4/
Bates, D., Maechler, M., & Jagan, M. (2024). Matrix: Sparse and dense matrix classes and methods. https://Matrix.R-forge.R-project.org
Bolker, B., & Robinson, D. (2024). Broom.mixed: Tidying methods for mixed models. https://github.com/bbolker/broom.mixed
Delignette-Muller, M. L., & Dutang, C. (2015). fitdistrplus: An R package for fitting distributions. Journal of Statistical Software, 64(4), 1–34. https://doi.org/10.18637/jss.v064.i04
Delignette-Muller, M.-L., Dutang, C., & Siberchicot, A. (2023). Fitdistrplus: Help to fit of a parametric distribution to non-censored or censored data. https://lbbe.univ-lyon1.fr/fr/fitdistrplus
Fox, J. (2003). Effect displays in R for generalised linear models. Journal of Statistical Software, 8(15), 1–27. https://doi.org/10.18637/jss.v008.i15
Fox, J., & Hong, J. (2009). Effect displays in R for multinomial and proportional-odds logit models: Extensions to the effects package. Journal of Statistical Software, 32(1), 1–24. https://doi.org/10.18637/jss.v032.i01
Fox, J., & Weisberg, S. (2018). Visualizing fit and lack of fit in complex regression models with predictor effect plots and partial residuals. Journal of Statistical Software, 87(9), 1–27. https://doi.org/10.18637/jss.v087.i09
Fox, J., & Weisberg, S. (2019a). An R companion to applied regression (Third). Sage. https://socialsciences.mcmaster.ca/jfox/Books/Companion/
Fox, J., & Weisberg, S. (2019b). An r companion to applied regression (3rd ed.). Sage. https://socialsciences.mcmaster.ca/jfox/Books/Companion/index.html
Fox, J., Weisberg, S., & Price, B. (2022). carData: Companion to applied regression data sets. https://r-forge.r-project.org/projects/car/
Fox, J., Weisberg, S., & Price, B. (2023). Car: Companion to applied regression. https://r-forge.r-project.org/projects/car/
Fox, J., Weisberg, S., Price, B., Friendly, M., & Hong, J. (2022). Effects: Effect displays for linear, generalized linear, and other models. https://www.r-project.org
Grolemund, G., & Wickham, H. (2011). Dates and times made easy with lubridate. Journal of Statistical Software, 40(3), 1–25. https://www.jstatsoft.org/v40/i03/
Gross, J., & Ligges, U. (2015). Nortest: Tests for normality. https://CRAN.R-project.org/package=nortest
Hothorn, T., Zeileis, A., Farebrother, R. W., & Cummins, C. (2022). Lmtest: Testing linear regression models. https://CRAN.R-project.org/package=lmtest
Kassambara, A. (2023). Ggpubr: ggplot2 based publication ready plots. https://rpkgs.datanovia.com/ggpubr/
Kuznetsova, A., Brockhoff, P. B., & Christensen, R. H. B. (2017). lmerTest package: Tests in linear mixed effects models. Journal of Statistical Software, 82(13), 1–26. https://doi.org/10.18637/jss.v082.i13
Kuznetsova, A., Bruun Brockhoff, P., & Haubo Bojesen Christensen, R. (2020). lmerTest: Tests in linear mixed effects models. https://github.com/runehaubo/lmerTestR
Larmarange, J. (2024). Labelled: Manipulating labelled data. https://larmarange.github.io/labelled/
Lenth, R. V. (2024). Emmeans: Estimated marginal means, aka least-squares means. https://rvlenth.github.io/emmeans/
Lesnoff, M., & Lancelot, R. (2023). Aod: Analysis of overdispersed data. https://cran.r-project.org/package=aod
Lüdecke, D. (2018). Ggeffects: Tidy data frames of marginal effects from regression models. Journal of Open Source Software, 3(26), 772. https://doi.org/10.21105/joss.00772
Lüdecke, D. (2024a). Ggeffects: Create tidy data frames of marginal effects for ggplot from model outputs. https://strengejacke.github.io/ggeffects/
Lüdecke, D. (2024b). sjPlot: Data visualization for statistics in social science. https://strengejacke.github.io/sjPlot/
Lüdecke, D., Ben-Shachar, M. S., Patil, I., Waggoner, P., & Makowski, D. (2021). performance: An R package for assessment, comparison and testing of statistical models. Journal of Open Source Software, 6(60), 3139. https://doi.org/10.21105/joss.03139
Lüdecke, D., Makowski, D., Ben-Shachar, M. S., Patil, I., Waggoner, P., Wiernik, B. M., & Thériault, R. (2024). Performance: Assessment of regression models performance. https://easystats.github.io/performance/
Müller, K., & Wickham, H. (2023). Tibble: Simple data frames. https://tibble.tidyverse.org/
R Core Team. (2024). R: A language and environment for statistical computing. R Foundation for Statistical Computing. https://www.R-project.org/
Ripley, B. (2024). MASS: Support functions and datasets for venables and ripley’s MASS. http://www.stats.ox.ac.uk/pub/MASS4/
Sievert, C. (2020). Interactive web-based data visualization with r, plotly, and shiny. Chapman; Hall/CRC. https://plotly-r.com
Sievert, C., Parmer, C., Hocking, T., Chamberlain, S., Ram, K., Corvellec, M., & Despouy, P. (2024). Plotly: Create interactive web graphics via plotly.js. https://plotly-r.com
Sjoberg, D. D., Larmarange, J., Curry, M., Lavery, J., Whiting, K., & Zabor, E. C. (2023). Gtsummary: Presentation-ready data summary and analytic result tables. https://github.com/ddsjoberg/gtsummary
Sjoberg, D. D., Whiting, K., Curry, M., Lavery, J. A., & Larmarange, J. (2021). Reproducible summary tables with the gtsummary package. The R Journal, 13, 570–580. https://doi.org/10.32614/RJ-2021-053
Spinu, V., Grolemund, G., & Wickham, H. (2023). Lubridate: Make dealing with dates a little easier. https://lubridate.tidyverse.org
Terry M. Therneau, & Patricia M. Grambsch. (2000). Modeling survival data: Extending the Cox model. Springer.
Therneau, T. M. (2024). Survival: Survival analysis. https://github.com/therneau/survival
Venables, W. N., & Ripley, B. D. (2002). Modern applied statistics with s (Fourth). Springer. https://www.stats.ox.ac.uk/pub/MASS4/
Wickham, H. (2011). The split-apply-combine strategy for data analysis. Journal of Statistical Software, 40(1), 1–29. https://www.jstatsoft.org/v40/i01/
Wickham, H. (2016). ggplot2: Elegant graphics for data analysis. Springer-Verlag New York. https://ggplot2.tidyverse.org
Wickham, H. (2023a). Forcats: Tools for working with categorical variables (factors). https://forcats.tidyverse.org/
Wickham, H. (2023b). Plyr: Tools for splitting, applying and combining data. http://had.co.nz/plyr
Wickham, H. (2023c). Stringr: Simple, consistent wrappers for common string operations. https://stringr.tidyverse.org
Wickham, H. (2023d). Tidyverse: Easily install and load the tidyverse. https://tidyverse.tidyverse.org
Wickham, H., Averick, M., Bryan, J., Chang, W., McGowan, L. D., François, R., Grolemund, G., Hayes, A., Henry, L., Hester, J., Kuhn, M., Pedersen, T. L., Miller, E., Bache, S. M., Müller, K., Ooms, J., Robinson, D., Seidel, D. P., Spinu, V., … Yutani, H. (2019). Welcome to the tidyverse. Journal of Open Source Software, 4(43), 1686. https://doi.org/10.21105/joss.01686
Wickham, H., & Bryan, J. (2023). Readxl: Read excel files. https://readxl.tidyverse.org
Wickham, H., Chang, W., Henry, L., Pedersen, T. L., Takahashi, K., Wilke, C., Woo, K., Yutani, H., Dunnington, D., & van den Brand, T. (2024). ggplot2: Create elegant data visualisations using the grammar of graphics. https://ggplot2.tidyverse.org
Wickham, H., François, R., Henry, L., Müller, K., & Vaughan, D. (2023). Dplyr: A grammar of data manipulation. https://dplyr.tidyverse.org
Wickham, H., & Henry, L. (2023). Purrr: Functional programming tools. https://purrr.tidyverse.org/
Wickham, H., Hester, J., & Bryan, J. (2024). Readr: Read rectangular text data. https://readr.tidyverse.org
Wickham, H., Vaughan, D., & Girlich, M. (2024). Tidyr: Tidy messy data. https://tidyr.tidyverse.org
Xie, Y. (2014). Knitr: A comprehensive tool for reproducible research in R. In V. Stodden, F. Leisch, & R. D. Peng (Eds.), Implementing reproducible computational research. Chapman; Hall/CRC.
Xie, Y. (2015). Dynamic documents with R and knitr (2nd ed.). Chapman; Hall/CRC. https://yihui.org/knitr/
Xie, Y. (2019). TinyTeX: A lightweight, cross-platform, and easy-to-maintain LaTeX distribution based on TeX live. TUGboat, 40(1), 30–32. https://tug.org/TUGboat/Contents/contents40-1.html
Xie, Y. (2024a). Knitr: A general-purpose package for dynamic report generation in r. https://yihui.org/knitr/
Xie, Y. (2024b). Tinytex: Helper functions to install and maintain TeX live, and compile LaTeX documents. https://github.com/rstudio/tinytex
Zeileis, A., & Grothendieck, G. (2005). Zoo: S3 infrastructure for regular and irregular time series. Journal of Statistical Software, 14(6), 1–27. https://doi.org/10.18637/jss.v014.i06
Zeileis, A., Grothendieck, G., & Ryan, J. A. (2023). Zoo: S3 infrastructure for regular and irregular time series (z’s ordered observations). https://zoo.R-Forge.R-project.org/
Zeileis, A., & Hothorn, T. (2002). Diagnostic checking in regression relationships. R News, 2(3), 7–10. https://CRAN.R-project.org/doc/Rnews/